gpt4 book ai didi

java - java DateFormat 问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:30:25 27 4
gpt4 key购买 nike

以下是我正在运行的一段代码。

@Test
public void testMyMehotd() {
String expected = "2012-09-12T20:13:47.796327Z";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'");
//df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = null;
try {
d = df.parse(expected);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}

String actual = df.format(d);

System.out.println(expected);
System.out.println(actual);

}

但输出与我预期的不同。

expected : 2012-09-12T20:13:47.796327Z
actual : 2012-09-12T20:27:03.000327Z

谁能告诉我这是什么原因以及解决方法。

提前致谢。

最佳答案

只要您超过 999 毫秒,DateFormat 就会尝试将剩余的毫秒数添加到您的日期。考虑以下更简单的示例:

 String expected = "2012-09-12T20:13:47.1001Z";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'");
Date d = df.parse(expected);

结果日期将为 2012-09-12T20:13:48.0001。也就是说,因为您有 1001 毫秒,所以您得到 1 额外 秒(1000 毫秒),并且 1 毫秒(1001 % 1000)。因此,您得到的不是原始日期中的 47 秒,而是 48 秒。


如果您尝试解析一个月中包含无效天数的日期,也会发生这种情况。例如,如果您尝试向九月添加额外的一天,并解析 2012-09-31:

String expected = "2012-09-31";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d = df.parse(expected);
System.out.println(df.format(d));

您实际上会得到 2012-10-01。同样,那是因为 DateFormat 会检测到 9 月 31 日不是有效,并且会尝试使用启发式方法转换 日期,因此加上一天,以下个月的第一天结束。

通过设置 lenient,有一个选项可以告诉解析器不要使用这些启发式算法。 模式为 false :

df.setLenient(false);

但是,使用这种模式,上面的两个例子都会抛出一个ParseException

关于java - java DateFormat 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12396270/

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