浅谈Format

Format 是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。
Java 平台为格式化日期、消息和数字分别提供了三个特殊的 Format 的子类:DateFormat、MessageFormat 和 NumberFormat。 


具体的子类必须实现三个方法: 
format(Object obj, StringBuffer toAppendTo, FieldPosition pos) 
formatToCharacterIterator(Object obj) 
parseObject(String source, ParsePosition pos) 


SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
例子:yyyy.MM.dd G 'at' HH:mm:ss z"  2001.07.04 AD at 12:08:56 PDT   
public SimpleDateFormat(String pattern) 给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
注:此构造方法可能不支持所有语言环境。要覆盖所有语言环境,请使用 DateFormat 类中的工厂方法。 
format
public StringBuffer format(Date date)格式化的日期-时间字符串。 
public Date parse(String text)解析字符串——日期


例子
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");//定义转换的格式
String time = format.format(new Date());//把日期转换成字符串
Date date=format.parse(time);//把字符串转化为日期
NumberFormat 可用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,
并与数值格式是否为偶小数无关。
     /**
* 将数字表示成字符串形式,可以根据不同的地区语言环境转换为不同的字符串
*/
@Test
public void test1(){
double money = 1000000.00;
NumberFormat format = NumberFormat.getCurrencyInstance(Locale.US);
String moneyStr = format.format(money);
System.out.println(moneyStr); 
@Test
public void test2() throws ParseException{
String moneyStr = "$1,000,000.00";
NumberFormat format = NumberFormat.getCurrencyInstance(Locale.US);
double money = format.parse(moneyStr).doubleValue();
System.out.println(money);
}
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,
使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,
包括整数 (123)、定点数 (123.4)、|| 0  数字  是  阿拉伯数字  
科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。
DecimalFormat decimalFormat = new DecimalFormat("000000");
messengerid.setTagValue(time + decimalFormat.format(num));


MessageFormat 获取一组对象,格式化这些对象,然后将格式化后的字符串插入到模式中的适当位置。 
//At 12:30 pm on jul 3,1998, a hurricance destroyed 99 houses and caused $1000000 of damage
//当一个语句中有多个和国际化相关的内容时,需要先切割字符串将和国际化相关的数据国际化后再拼接字符串.
public static void main(String[] args) {
String str = "At {0,time,full} on {1,date,full}, a hurricance destroyed {2,number} houses and caused {3,number,currency} of damage";
MessageFormat format = new MessageFormat(str,Locale.CHINA);

Calendar c = Calendar.getInstance();
c.set(1998, 6, 3, 12, 30, 0);
Date date = c.getTime();

str = format.format(new Object[]{date,date,99,1000000});
System.out.println(str);
}
                     

你可能感兴趣的:(浅谈Format)