之所以在国际化中介绍DateFormat和NumberFormat这两个类,一是因为本身这两个类是地区敏感类,即可用传入Locale对象;二是因为这两个类具有不同的输出模式,而这些模式能在国际化的动态数据显示MessageFormat的占位符中使用到(在下一篇博客中介绍)。

  我们先来看看DateFormat。

  DateFormat和SimpleDateFormat拥有类似的功能,但是一般我们会用SimpleDateFormat比较多,这是因为使用SimpleDateFormat能按自己制定很细的日期格式,同时也支持Locale对象,当然本篇中我们只介绍DateFormat。

  DateFormat类可以将一个日期/时间类(例如Date类)的对象格式化为表示某地区或语言环境的日期/时间字符串,当然也能从字符串转换为日期/时间类。

  DateFormat类具有一些表示日期/时间显示格式的整型常量,这些常量也是我们刚才说过的MessageFormat占位符中可以使用到的模式,这些常量有:

  SHORT、MEDIUM(同时也是默认格式)、LONG、FULL这几种。分别表示了输出日期格式的详细程度。

  

  DateFormat最终将一个日期/时间对象输出到字符串显示的格式会被三个因素影响,一是获取DateFormat实例对象的方法,二是该方法中指定的Locale对象,三是上面提到的4种日期长度格式常量。

  我们看看DateFormat能获取实例对象的方法:

  ① getDateInstance方法,只获取日期的实例对象

  ② getTimeInstance方法,只获取时间的实例对象

  ③ getDateTimeInstance方法,获取日期和时间的实例对象

  对上面的每个方法,有无参的(长度模式和Locale都采用默认值),有单独参数的(指定长度模式),有两个参数的(指定长度模式和Locale对象)共九种方法。

  下面我们通过示例来看看每种长度模式的常量会使日期或时间显示出什么样的格式,以下getDateInstance方法中我省略了Locale对象,这样每个方法都会按照我本地语言环境,也就是中文环境:

例1-1:

  1. Date date = new Date();
  2.  
  3. DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
  4. String dateStr = df.format(date);
  5. System.out.println(dateStr);

只获取日期,长度模式为MEDIUM,输出:2016-1-9

例1-2:

  1. Date date = new Date();
  2.  
  3. DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);
  4. String dateStr = df.format(date);
  5. System.out.println(dateStr);

只获取日期,长度模式为FULL,输出:2016年1月9日 星期六

例1-3:

  1. Date date = new Date();
  2.  
  3. DateFormat df = DateFormat.getTimeInstance(DateFormat.LONG);
  4. String dateStr = df.format(date);
  5. System.out.println(dateStr);

只获取时间,长度模式为FULL,输出:下午04时33分17秒。

  

当然是用DateFormat还能将一个字符串转换为日期/时间对象,但是用的时候一定要注意:字符串中日期的格式一定要满足DateFormat的四种长度模式常量指定的格式,并且在使用DateFormat方法时也要指定字符串中日期或时间使用的是哪种格式。

例1-4:

  1. String dateStr = "2016-1-9 16:39:27";
  2.  
  3. DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
  4. Date date = df.parse(dateStr);
  5. System.out.println(date);

  将字符串转换为Date对象,getDateTimeInstance方法中必须要指明字符串中日期的采用的格式才能转换成功。当然如果我们只想获取该字符串中的日期或时间,只需要使用getDateInstance方法或getTimeInstance方法即可,但也必须要指明格式。

  附:DateFormat非线程安全,因此每个线程都应该创建自己的DateFormat实例对象。

  DateFormat类的基本用法就如上所示。我们现在来看看NumberFormat类。

  对于NumberFormat类的getNumberInstance方法和getIntegerInstance方法也有format方法和parse方法,format方法将一个基本类型的数字转换为字符串,而parse方法将一个字符串转换为Number类型(Number类型是所有基本类型包装类的父类),这两个方法其实都可以使用String类的静态方法valueOf或者各个基本类型包装类中的静态方法替代。

  因此对于NumberFormat我们只学习下面两个方法中的format和parse:

  getCurrencyInstance(Locale  locale)方法:以参数Locale对象所指定的环境来获得处理货币的NumberFormat实例对象。

  getPercentInstance(Locale  locale)方法:以参数Locale对象所指定的环境类获得处理百分比数值的NumberFormat实例对象。

例2-1:

  1. int price = 18;
  2.  
  3. NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
  4. String priceformat = nf.format(price);
  5. System.out.println(priceformat);

以中国的货币格式显示,输出:¥18.00

例2-2:

  1. int price = 18;
  2.  
  3. NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.CHINA);
  4. String priceformat = nf.format(price);
  5. System.out.println(priceformat);

以美国的货币格式显示,输出:$18.00

例2-3:

  1. String priceformat = "¥18";
  2.  
  3. NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.CHINA);
  4. Number number = nf.parse(priceformat);
  5. double price = number.doubleValue();
  6. System.out.println(price);

将货币格式的字符串转换为基本类型数字,输出:18.0

 

例2-4:

  1. double percent = 0.5;
  2.  
  3. NumberFormat nf = NumberFormat.getPercentInstance();
  4. String percentFormat = nf.format(percent);
  5. System.out.println(percentFormat);

以百分比格式将基本类型数字转换为字符串,输出:50%

国际化之DateFormat、NumberFormat的更多相关文章

  1. javaWEB国际化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用

    DateFormat:格式化日期的工具类,本身是一个抽象类: NumberFormat:格式化 数字 到 数字字符串,或货币字符串的字符类; MessageFormat: 可以格式化模式字符串,模式字 ...

  2. JavaWeb的国际化

    国际化 1.国际化开发概述 1.1.软件的国际化 软件开发时,要使它能同时应对世界不同地区和国家的方法,并针对不同地区和国家的方法,提供相应的,符合来访者阅读习惯的页面或数据 国际化简称:i18n : ...

  3. JavaWeb国际化

    软件的国际化: 软件在不同的地方,适应不同的风格: 中国: 显示中文,以及服务符合中国习惯的文本字符串! 美国: 显示英文,以及服务符合他国习惯的文本字符串! 这种软件,就叫国际化的软件! 如何做到国 ...

  4. 国际化之MessageFormat与占位符

    如果一个字符串文本中包含了多个与国际化相关的数据,可以使用MessageFormat类对这些数据进行批量处理. 例如: 在2016年1月9日的时候,一场台风导致了500间房屋的摧毁和¥1000000元 ...

  5. servlet中的过滤器 国际化

    1. 过滤器 基本概念 过滤器是需要在xml中配置的. 为什么需用到过滤器? 项目开发中,经常会涉及到重复代码的实现! 注册 ----à Servlet [1. 设置编码] ----à  JSP 修改 ...

  6. JavaWeb 后端 <十三> 之 监听器 JSTL国际化

    1. 监听器 1.1   概述 监听器: 主要是用来监听特定对象的创建或销毁.属性的变化的! 是一个实现特定接口的普通java类! 对象: 自己创建自己用 (不用监听) 别人创建自己用 (需要监听) ...

  7. Java操作属性文件与国际化

    在前面讲到的java类集中的Hashtable中,有一个子类Properties,此类定义如下: public class Properties extends Hashtable<Object ...

  8. java学习笔记—国际化(41)

    国际化:internationalization即I18N. 举例: 本科高校的网站,一般的都有中文和英文两种页面风格.因此将这种根据不同用户群体显示不同的页面风格的方式称之为页面的国际化. 翻译 V ...

  9. Java 监听器,国际化

    1. 监听器 1.1 概述 监听器: 主要是用来监听特定对象的创建或销毁.属性的变化的! 是一个实现特定接口的普通java类! 对象: 自己创建自己用 (不用监听) 别人创建自己用 (需要监听) Se ...

随机推荐

  1. Cocos2dx项目移植Android平台

    链接地址:http://blog.csdn.net/iuncle/article/details/24772183 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.Classes目录下存放. ...

  2. [转] iOS应用架构谈 网络层设计方案

    原文地址:http://casatwy.com/iosying-yong-jia-gou-tan-wang-luo-ceng-she-ji-fang-an.html iOS应用架构谈 开篇 iOS应用 ...

  3. Ubantu指令收藏

    Ubuntu常用命令大全,学习ubuntn系统的朋友可以收藏下,用ctrl+F查找即可   一.文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ...

  4. HDU 5025Saving Tang Monk BFS + 二进制枚举状态

    3A的题目,第一次TLE,是因为一次BFS起点到终点状态太多爆掉了时间. 第二次WA,是因为没有枚举蛇的状态. 解体思路: 因为蛇的数目是小于5只的,那就首先枚举是否杀死每只蛇即可. 然后多次BFS, ...

  5. 【集训笔记】动态规划【HDOJ1159【HDOJ1003

    终于开始DP了] HDOJ_1159  Common  Subsequence 题目链接 Sample Input abcfbc abfcab programming contest abcd mnp ...

  6. UNIX网络编程 卷2:进程间通信

    这篇是计算机类的优质预售推荐>>>><UNIX网络编程 卷2:进程间通信(第2版)> UNIX和网络专家W. Richard Stevens的传世之作 编辑推荐 两 ...

  7. 网页制作之html基础学习3-css样式表

    样式:CSS(Cascading Style Sheets,层叠样式表),作用是美化HTML网页. 在样式里面用 /*  */ 进行注释. 1.样式表的基本概念 1.1.样式表分类 1.内联样式表 和 ...

  8. 模拟QQ系统设置面板实现功能

    业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本 ...

  9. Add custom and listview web part to a page in wiki page using powershell

    As we know, Adding list view web part is different from custom web part using powershell, what's mor ...

  10. “/” 应用程序中的服务器错误 - IIS 发布错误

    解决方法, 将bin目录下的全部文件复制到iis下