TL;博士
LocalDateTime ldt = LocalDateTime.parse("2009-08-19 12:00:00".replace(" " , "T"));
java.time
其他的答案是正确的,但使用传统的日期时间类。那些麻烦的旧类已经被java.time类所取代。
您的输入字符串接近标准ISO 8601格式。通过用T
替换中间的空格来调整。然后可以在不指定格式模式的情况下解析它。解析/生成字符串时,java.time类默认使用ISO 8601。
String input = "2009-08-19 12:00:00".replace(" " , "T");
输入数据没有关于offset-from-UTC或时区的信息。所以我们解析为LocalDateTime
。
LocalDateTime ldt = LocalDateTime.parse(input);
如果通过上下文知道预期偏移量,应用它。也许它的目的是为UTC(偏移量为零),我们可以使用常数ZoneOffset.UTC
。
OffsetDateTime odt = ldt.atOffset(ZoneOffset.UTC);
或者你也许知道它是针对特定时区的。时区是偏移量加用于处理异常情况(如夏令时(DST))的一组规则。
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Montreal"));
关于java.time
的java.time框架是建立在Java 8和更高版本。这些课程取代了老的麻烦日期时间课程,如java.util.Date
,.Calendar
,& java.text.SimpleDateFormat
。
Joda-Time项目现在位于maintenance mode,建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。
大部分的java.time功能后移植到Java 6 和ThreeTenABP还适于Android(见How to use…)。
ThreeTen-Extra项目扩展java.time与其他类。这个项目是未来可能增加java.time的一个试验场。
我希望人们在犯错时会停止称呼“奇怪”和“怪异”的事物。 :/ – Bombe 2009-08-22 01:57:15
对不起。我正在调试我的大四多年来写过的代码,我希望能够信任它。 – 2009-08-24 15:35:06