其他答案在 2012 年是很好的答案。以下是如何使用现代(2014)Java 日期和时间类的示例:
System.out.println("date de la requete est " + dateq);
DateTimeFormatter dtf = DateTimeFormatter
.ofPattern("EEE MMM dd HH:mm:ss xx uuuu", Locale.ROOT);
OffsetDateTime dateTime1 = OffsetDateTime.parse(dateq, dtf);
System.out.println("new date " + dateTime1);
代码示例的灵感来自一个重复的问题(如我所见),How to convert Xml String date to int in java。使用该问题中的示例字符串,它会打印:
date de la requete est Tue Feb 08 12:30:27 +0000 2011
new date 2011-02-08T12:30:27Z
问:我无法在 Android 上使用较新的类(?)
答:是的,你可以。对于 Android,请使用专门为 Android 定制的 backport,ThreeTenABP。否则,对于 Java 6 和 7,请使用ThreeTen Backport。
问:您的代码不适用于此问题中的日期时间字符串!
A: (1) 如果可以,请避免使用 CEST 等三个和四个字母的时区缩写。许多是模棱两可的,甚至可能会随着您的 JVM 当前时区设置而有所不同。CEST 只是一个时区的夏季半个时区,而不是一个完整的时区。(2)如果您无法获得没有CEST
或类似的字符串,请尝试在问题中使用ZonedDateTime
而不是OffsetDateTime
和使用zzz
格式模式。这在示例中有效并产生2012-04-08T16:37+02:00[Europe/Paris]
.
问:如何使用较新的类?
答: Oracle 教程是一个很好的起点。
问:Locale.ROOT
??
答:如果您的日期时间字符串来自世界上的特定地点并使用该地点的语言,当然请使用相应的语言环境。如果它只是英语,因为各地的计算机系统都倾向于输出英语,我更喜欢使用Locale.ROOT
“语言环境中性语言环境”,比如说“不要在这里做任何特定于语言环境的事情”。