java中如何对时间做国际化处理啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何对时间做国际化处理啊相关的知识,希望对你有一定的参考价值。

import java.util.*;
import java.text.*;

public class timeText

/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
Date now = new Date();
Calendar cal = Calendar.getInstance();

DateFormat d1 = DateFormat.getDateInstance(); //默认语言(汉语)下的默认风格(MEDIUM风格,比如:2008-6-16 20:54:53)
String str1 = d1.format(now);
DateFormat d2 = DateFormat.getDateTimeInstance();//获取系统时间格式
String str2 = d2.format(now); //将时间格式转换成字符串
DateFormat d3 = DateFormat.getTimeInstance();
String str3 = d3.format(now);
DateFormat d4 = DateFormat.getInstance(); //使用SHORT风格显示日期和时间
String str4 = d4.format(now);

DateFormat d5 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); //显示日期,周,时间(精确到秒)
String str5 = d5.format(now);
DateFormat d6 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); //显示日期。时间(精确到秒)
String str6 = d6.format(now);
DateFormat d7 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); //显示日期,时间(精确到分)
String str7 = d7.format(now);
DateFormat d8 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM); //显示日期,时间(精确到分)
String str8 = d8.format(now);//与SHORT风格相比,这种方式最好用
System.out.println("用Date方式显示时间: " + now);//此方法显示的结果和Calendar.getInstance().getTime()一样

System.out.println("用DateFormat.getDateInstance()格式化时间后为:" + str1);
System.out.println("用DateFormat.getDateTimeInstance()格式化时间后为:" + str2);
System.out.println("用DateFormat.getTimeInstance()格式化时间后为:" + str3);
System.out.println("用DateFormat.getInstance()格式化时间后为:" + str4);

System.out.println("用DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL)格式化时间后为:" + str5);
System.out.println("用DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG)格式化时间后为:" + str6);
System.out.println("用DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT)格式化时间后为:" + str7);
System.out.println("用DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM)格式化时间后为:" + str8);


运行结果:

用Date方式显示时间: Mon Jun 16 20:54:53 CST 2008
用DateFormat.getDateInstance()格式化时间后为:2008-6-16
用DateFormat.getDateTimeInstance()格式化时间后为:2008-6-16 20:54:53
用DateFormat.getTimeInstance()格式化时间后为:20:54:53
用DateFormat.getInstance()格式化时间后为:08-6-16 下午8:54
用DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL)格式化时间后为
:2008年6月16日 星期一 下午08时54分53秒 CST
用DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG)格式化时间后为
:2008年6月16日 下午08时54分53秒
用DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT)格式化时间后
为:08-6-16 下午8:54
用DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM)格式化时间
后为:2008-6-16 20:54:53

或者直接获取毫秒,但是感觉与你问题无关
参考技术A 二 java中的相关类介绍

<1>java.util.Locale

Locale类的一个实例通常包含国家和语言信息。其中的每一个部分都是由基于国际标准化组织(ISO)制定的国家代码ISO-3166和语言代码ISO-639的两字符的字符串构成的

01.// Get the current system date and time. 02.Date date = new Date(); 03. 04.// Get a France locale using a Locale constant. 05.Locale localeZN = Locale.CHINESE; 06. 07.// Create an English/US locale using the constructor. 08.Locale localeEN = new Locale("en", "US" ); 09. 10.// Get a date time formatter for display in France. 11.DateFormat fullDateFormatFR = 12.DateFormat.getDateTimeInstance( 13.DateFormat.FULL, 14.DateFormat.FULL, 15.localeZN); 16. 17.// Get a date time formatter for display in the U.S. 18.DateFormat fullDateFormatEN = 19.DateFormat.getDateTimeInstance( 20.DateFormat.FULL, 21.DateFormat.FULL, 22.localeEN); 23. 24.System.out.println("Locale: " + localeZN.getDisplayName()); 25.System.out.println(fullDateFormatFR.format(date)); 26.System.out.println("Locale: " + localeEN.getDisplayName()); 27.System.out.println(fullDateFormatEN.format(date)); <2>java.util.TimeZone

TimeZone类的实例包含了一个与格林威治标准时间(GMT)相比较得出的以微秒为单位的时区偏移量,而且它还处理夏令时。getDefault从系统时钟返回时区数据

01./*TimeZone对象给我们的是原始的偏移量,也就是与GMT相差的微秒数,而且还会告诉我们这个时区是否使用夏令时*/ 02. 03. TimeZone timeZoneFL = TimeZone.getDefault(); 04. System.out.println("\n" + timeZoneFL.getDisplayName()); 05. System.out.println("RawOffset: " + timeZoneFL.getRawOffset()); 06. System.out.println("Uses daylight saving: " + timeZoneFL.useDaylightTime()); 07. 08. TimeZone timeZoneLondon = TimeZone.getTimeZone("America/New_York"); 09. System.out.println("\n" + timeZoneLondon.getDisplayName()); 10. System.out.println("RawOffset: " + timeZoneLondon.getRawOffset()); 11. System.out.println("Uses daylight saving: " + timeZoneLondon.useDaylightTime()); 12. 13. TimeZone timeZoneParis = TimeZone.getTimeZone("Europe/Paris"); 14. System.out.println("\n" + timeZoneParis.getDisplayName()); 15. System.out.println("RawOffset: " + timeZoneParis.getRawOffset()); 16. System.out.println("Uses daylight saving: " + timeZoneParis.useDaylightTime()); 混合起来能够支持国际化的需求:

01. Locale localeZN = Locale.CHINESE; 02. Locale localeEN = Locale.US; 03. 04. TimeZone timeZoneHZ = TimeZone.getDefault(); 05. TimeZone timeZoneUS = TimeZone.getTimeZone("America/New_York"); 06. 07. 08. DateFormat dateFormatter = DateFormat.getDateTimeInstance( 09. DateFormat.FULL, 10. DateFormat.FULL, 11. localeZN); 12. DateFormat dateFormatterParis = DateFormat.getDateTimeInstance( 13. DateFormat.FULL, 14. DateFormat.FULL, 15. localeEN); 16. 17. Date curDate = new Date(); 18. 19. System.out.println("Display for China HZ."); 20. System.out.println(timeZoneHZ.getDisplayName(localeZN)); 21. dateFormatter.setTimeZone(timeZoneHZ); 22. System.out.println(dateFormatter.format(curDate)); 23. 24. dateFormatter.setTimeZone(timeZoneUS); 25. System.out.println(timeZoneUS.getDisplayName(localeZN)); 26. System.out.println(dateFormatter.format(curDate)); 27. 28. System.out.println("\nDisplay for US office."); 29. System.out.println(timeZoneHZ.getDisplayName(localeEN)); 30. dateFormatterParis.setTimeZone(timeZoneHZ); 31. System.out.println(dateFormatterParis.format(curDate)); 32. 33. dateFormatterParis.setTimeZone(timeZoneUS); 34. System.out.println(timeZoneUS.getDisplayName(localeEN)); 35. System.out.println(dateFormatterParis.format(curDate)); <3>System.getCurrentTime()

返回当前系统的时间与UTC 1970:01:01 00:00:00时间之间的毫秒差距
参考技术B 可以利用Calendar处理

Calendar.getInstance(Locale.xxx)

getInstance
public static Calendar getInstance(Locale aLocale)使用默认时区和指定语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和给定的语言环境。

windows客户端开发--客户端国际化中特殊处理(日期等)

之前介绍了windows客户端使用xml进行国际化。

我们更多的时候关注的是显示,比如中文是关闭,英文系统显示为close。

但是在国际化过程中,还有一些其他地方不要处理的。不只是简单的翻译而已,有时候需要改变规则。

时间就是一个例子。

从学习英语我们就知道,老外时间、地址等表达方式跟我们不同。

所以这篇博客就是与您探讨探讨客户端国际化过程中对日期的特殊处理。

现在的前提是,你拿到了一个时间戳,要把它进行显示。

这非常简单,使用strftime即可。

博客http://blog.csdn.net/wangshubo1989/article/details/50500515对strftime做了详细的介绍,不熟悉的客官可以瞅一眼。

其实这里提供的只是一种想法而已。

比如 你要显示年月日,2016 3 24
中文的时候需要这样的格式:

%Y %m %d

但是对于英文,我们就需要些 月日年或日月年。

%m %d %Y

%d %m %Y

这里需要说明一下,到底选哪种呢?

日月年 是英式的表达方式
月日年 是美式的表达方式

而国际上,更青睐于英式, 即日月年。

在国际过程中,还有注意的就是第一、第二、第三的问题。

以上是关于java中如何对时间做国际化处理啊的主要内容,如果未能解决你的问题,请参考以下文章

Java 日期时间类

JAVA程序设计题————Java国际化

JAVA做语言国际化

java项目国际化ResourceBundleMessageSource

windows客户端开发--客户端国际化中特殊处理(日期等)

Java,Spring 国际化:如何在简单字符串中使用 .properties 中的值?