我从休息服务获取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),这是我从上下文中得到的。
答案 0 :(得分:3)
你做不到。 SimpleDateFormat
是一个可以解析日期从字符串和格式日期到字符串的对象。但是一个Date
对象保存了具有给定时间点含义的数据,这是完全不同的。
但是,您可以使用SimpleDateFormat
将日期转换为字符串:
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MMM-dd", myLocaleInstance);
System.out.println(sdf.format(myXMLGregorianCalendarInstance));
您只需要组装格式字符串,然后获取Locale实例(例如来自语言代码)。
Date
没有时区信息,而Calendar
则有。必须始终牢记这一点,特别是在处理Web服务,提供和使用来自世界各地的数据时...... 答案 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日