gpt4 book ai didi

java - 如何正确地将时间字符串转换为日期对象

转载 作者:行者123 更新时间:2023-11-29 09:30:45 25 4
gpt4 key购买 nike

我在将时间字符串转换为准确的日期对象表示时遇到问题

我正在与之通信的服务器将提供这样的 UTC 时间值。

2013-01-02T05:32:02.8358602Z

当我尝试以下代码时,我得到的毫秒数比预期的 UTC 快了将近 2 小时 15 分钟。

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault());
inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = inputFormat.parse("2013-01-02T05:32:02.8358602Z");

我做错了什么

最佳答案

问题是 SimpleDateFormat 需要 8358602 不是几分之一秒,如果 millis = 8358602 ms,那么它就是数字。默认情况下,SimpleDateFormat 处于“宽松”模式,这就是它接受 8358602 的原因,它还将在日字段中接受 99,并将额外的天数移至月字段等。如果您将严格模式切换为 SimpleDateFormat.setLenient(true),您将获得 ParseException,因为毫秒的最大值为 999。

我可以提供解决方法。您的日期采用带小数秒的 W3C XML Schema 1.0 日期/时间格式。对于这种情况,javax.xml.datatype.XMLGregorianCalendar 就是您所需要的。这行得通

DatatypeFactory dtf = DatatypeFactory.newInstance();
XMLGregorianCalendar c = dtf.newXMLGregorianCalendar("2013-01-02T05:32:02.8358602Z");
System.out.println(c.toGregorianCalendar().getTime());

并打印

Wed Jan 02 07:32:02 EET 2013

注意 EET 是 GMT+2

关于java - 如何正确地将时间字符串转换为日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14117715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com