我希望通过下面的测试。有人能告诉我哪里做错了吗?很可能我使用了错误的模式,但我看不到哪里出了问题。
@Test
public void parseDateTest() {
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.sss'Z'");
DateTime dt = formatter.parseDateTime("1983-03-06T05:00:03.000Z");
assertEquals("1983-03-06T05:00:03.000Z", dt.toString());
}
仅供参考日期toString()打印:1983年3月6日星期一05时00分00秒
谢谢!
请注意,在这个代码片段中,我依赖于默认时区。这不是生产代码,如何根据需要正确处理时区是许多其他问题所涵盖的。
- 默认时区派生自系统属性user.timezone。如果该属性为空或不是有效的标识符,则转换JDK时区默认值。如果转换失败,则使用UTC。*
3条答案
按热度按时间j2qf4p5b1#
这个函数检查
"1983-03-06T05:00:03.000Z"
是否等于dt.toString()
。您说dt.toString()
等于"1983-03-06T05:00:00.000Z"
。现在的问题是为什么
dt.toString()
没有正确的秒数,让我们看看DateTimeFormat
模式:根据文档,
s
表示“秒”,S
表示“秒的分数”(注意大小写)。这意味着在您的输入字符串中,03
和000
都被解析为秒(后者应该是分数),而您的DateTime
的秒被00
覆盖。请尝试更新此格式字符串:j5fpnvbx2#
Java.时间
下面引用的是home page of Joda-Time的通知:
请注意,从JavaSE8开始,要求用户迁移到java.time(JSR-310)-JDK的核心部分,它将取代这个项目。
java.time
API的解决方案**:java.time
API基于ISO 8601,因此您不需要DateTimeFormatter
来解析已经采用ISO 8601格式的日期-时间字符串(例如,您的日期-时间字符串1983-03-06T05:00:03.000Z
)。从**Trail: Date Time**了解有关现代日期-时间API的更多信息。
62lalag43#
不要使用
dt.toString()
,而使用formatter.format(dt)
,这就是格式化程序的作用: