数字
数字和货币的格式是高度依赖于locale的,java类库提供了一个格式器对象的集合,可以对java.text包中的数字值进行格式化和解析。步骤如下
- 使用上一节的方法获得一个locale对象
- 使用一个工厂方法得到一个格式器对象
- 使用这个格式器对象来完成格式化和解析工作
工厂方法共有三个:getNumberInstance、getCurrencyInstance和getPercentInstance。他们分别返回可以关于数字、货币和百分比进行格式化和解析的对象
相反的,如果想读取一个按照某个locale规定而输入的数字,那么就需要使用parse方法,parse方法能够处理小数点和分隔符以及其他语言中的数字。
parse返回类型是抽象的Number。这是一个Double或Long的包装器,这取决于被解析的数字是否是浮点数,如果两者都可以接受,可以使用Number类中的doubleValue方法来读取被包装的数字
请注意,由getXxxInstance工厂方法返回的类只是抽象类NumberFormat类的一个子类,工厂方法知道如何定位属于特定的locale对象。
可以用静态的getAvailableLocales方法得到一个当前所支持的locale的对象列表。这个方法返回一个locale对象数组,从中可以获得针对它们的数字格式器对象。
示例程序如下
1 | public void testNumberFormat()throws Exception{ |
运行结果:
货币
虽然我们可以使用NumberFormat.getCurrencyInstance方法格式化货币,可是在有些时候它不太灵活,只能针对一种locale进行格式化。假设你为一个美国客户准备了一张货物单,上面的货物金额有的是用美元表示的,有的是用欧元。
1 | NumberFormat format1 = NumberFormat.getCurrencyInstance(Locale.US); |
这时,可以使用Currency类
可以通过将一个货币标识符传给静态的Currency.getInstance方法来得到一个Currency对象,然后对每个格式器都调用setCurrency方法
1 | NumberFormat euroFormatter = NumberFormat.getCurrencyInstance(Locale.US); |
日期和时间
当格式化日期和时间时,需要考虑4个与locale相关的问题
- 月份和星期应该用本地语言来表示
- 年月日的顺序要符合本地习惯
- 公历可能不是本地首选的日期表示方法
- 必须要考虑本地的时区
java的DateFormat类可以用来处理这些问题。它和NumberFormat很类似
首先要得到一个locale,也可以使用默认的locale或者调用静态的getAvailableLocales方法来查看都是那些locale支持日期格式化。
lenient标志用于对日期进行宽松的解释
看个荔枝
1 |
|
运行结果