资源国际化之格式的转换

一、DateFormat类(国际化日期)

DateFormat 类可以将一个日期/时间对象格式化为表示某个国家地区的日期/时间字符串。

DateFormat 类除了可按国家地区格式化输出日期外,它还定义了一些用于描述日期/时间的显示模式的 int 型的常量,包括FULL, LONG, MEDIUM, DEFAULT, SHORT,

实例化DateFormat对象时,可以使用这些常量,控制日期/时间的显示长度。

package com.jjyy.dataformat;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.junit.Test;

public class DateFormatDemo {
	/**
	 * 将日期对象转换为字符串表示形式,此时根据地区语言环境不同,需要转成不同样式的字符串形式
	 */
	@Test
	public void test1(){
		Date date = new Date();
		DateFormat format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.CHINA);
		String dateStr = format.format(date);
		System.out.println(dateStr);
	}
	
	/**
	 * 将字符串形式的日期时间信息转换为Date对象
	 * @throws ParseException 
	 */
	@Test
	public void test2() throws ParseException{
		String dateStr = "2015年1月24日 星期五 上午11时56分39秒 CST";
		DateFormat format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.CHINA);
		Date date = format.parse(dateStr);
		System.out.println(date.toLocaleString());
	}
	
	/**
	 * 9月~~10日##2015年**12时%20分%10秒
	 * @throws ParseException 
	 */
	@Test
	public void test3() throws ParseException{
		String dateStr = "09月~~10日##2015年**12时%20分%10秒";
		SimpleDateFormat dateFormat = new SimpleDateFormat("MM月~~dd日##yyyy年**HH时%mm分%ss秒");
		Date date = dateFormat.parse(dateStr);
		System.out.println(date.toLocaleString());
	}
	
	@Test
	public void test4(){
		Date date = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("MM月~~dd日##yyyy年**HH时%mm分%ss秒");
		String str = dateFormat.format(date);
		System.out.println(str);
	}
}

二、NumberFormat类

实例化NumberFormat类时,可以使用locale对象作为参数,也可以不使用

package com.jjyy.NumberFormat;

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

import org.junit.Test;

public class NumberFormatDemo {
	/**
	 * 将数字表示成字符串形式,可以根据不同的地区语言环境转换为不同的字符串
	 */
	@Test
	public void test1(){
		double money = 1000000.00;
		NumberFormat format = NumberFormat.getCurrencyInstance(Locale.US);
		String moneyStr = format.format(money);
		System.out.println(moneyStr);
	}
	/**
	 * $1,000,000.00
	 * @throws ParseException 
	 */
	@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);
	}
}

三、MessageFormat(动态文本)

如果一个字符串中包含了多个与国际化相关的数据,可以使用MessageFormat类对这些数据进行批量处理。

package com.jjyy.messageformat;

import java.text.MessageFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

public class MSGFormatDemo {
	//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);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值