将日期转换为SimpleDateFormat

时间:2013-09-11 17:05:28

标签: java datetime localization

我从休息服务获取XMLGregorianCalendar。我需要根据语言本地化月份。我已经读过,本地化日期的最佳方法是使用SimpleDateFormat类。问题是我不确定如何将XMLGregorianCalendar转换为SimpleDateFormat。投射不起作用,我能得到的最接近的是XMLGregorianCalendar.toGregorianCalendar.getTime() 返回Date,但我找不到将Date转换为SimpleDateFormat类型的方法。有任何想法吗?

CNC中 我喜欢SimpleDateFormat的原因是因为我可以使用ISO 639-1代码列表(http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes),这是我从上下文中得到的。

2 个答案:

答案 0 :(得分:3)

你做不到。 SimpleDateFormat是一个可以解析日期从字符串和格式日期到字符串的对象。但是一个Date对象保存了具有给定时间点含义的数据,这是完全不同的。

但是,您可以使用SimpleDateFormat将日期转换为字符串:

SimpleDateFormat sdf  = new SimpleDateFormat("YYYY-MMM-dd", myLocaleInstance);
System.out.println(sdf.format(myXMLGregorianCalendarInstance));

您只需要组装格式字符串,然后获取Locale实例(例如来自语言代码)。

经验法则

  • 依赖默认的Locale可能意味着不好的麻烦! (虽然这里不相关,但同样适用于默认编码)
  • Date没有时区信息,而Calendar则有。必须始终牢记这一点,特别是在处理Web服务,提供和使用来自世界各地的数据时......
  • 我个人的最爱,虽然略有不同,但可能会像地狱一样丑陋:在日历中,MONTHs从0开始编号。所以编号为12的月份不是12月,因为jarnbjo说...
  • 格式化对象通常不是线程安全的。在静态变量中使用它们是难闻的气味!对于DecimalFormat也是如此。

答案 1 :(得分:2)

首先,您应该将XMLGregorianCalendar实例转换为Date对象,并为所需语言创建一个Locale对象:

Date date = xmlCalendar.toGregorianCalendar().getTime();        
Locale locale = new Locale("es");

然后,您可以使用SimpleDateFormat以指定语言获取月份名称:

SimpleDateFormat sdf = new SimpleDateFormat("MMMM", locale);        
System.out.println(sdf.format(date));

将输出:septiembre

或者您可以使用指定的语言输出本地化的日期格式化程序来输出整个日期:

System.out.println(DateFormat.getDateInstance(DateFormat.LONG, locale).format(date));

将输出:2013年7月11日