我从休息服务那里得到了XMLGregorianCalendar。我需要根据语言本地化几个月。我读过,本地化日期的最佳方法是使用SimpleDateFormat类。问题是我不确定如何将XMLGregorianCalendar转换为SimpleDateFormat。投放无效,我能得到的最接近的是XMLGregorianCalendar.toGregorianCalendar.getTime()
它返回一个Date,但是我找不到将Date转换为SimpleDateFormat类型的方法。有任何想法吗?

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

最佳答案

你不能那样做。 SimpleDateFormat是一个对象,可以解析字符串中的日期并将日期格式化为字符串。但是,保存具有给定时间点含义的数据的Date对象完全不同。

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

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


您只需要汇编格式字符串,并获取Locale实例(例如,从语言代码中获取)。

经验法则


依靠默认的Locale可能意味着很麻烦! (尽管此处不相关,但默认编码也是如此)
Date没有时区信息,而Calendar有。必须时刻牢记这一点,尤其是在处理Web服务,提供和使用来自世界各地的数据时……
我个人的最爱,虽然略有不同,但可能很难理解:在Calendar中,MONTH从0开始索引。所以编号12的月份不是jarnbjo所说的12月...
格式化对象通常不是线程安全的。在静态变量中使用它们是一种难闻的气味! DecimalFormat也是如此。

关于java - 将日期转换为SimpleDateFormat,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18747212/

10-12 15:16