gpt4 book ai didi

java - SimpleDateFormat.parse 和 SimpleDateFormat.format 不产生相同的值

转载 作者:行者123 更新时间:2023-11-30 08:16:10 29 4
gpt4 key购买 nike

我们在 java.util.Date 对象的 JAXB 序列化/反序列化过程中使用 SimpleDateFormat,我正在编写以下实用程序来实现这一点

public DateFormat getDateFormat(String format){ 
DateFormat formatter = new SimpleDateFormat(format);
formatter.setLenient(false);
return formatter;
}

@Test public void testMarshallUnmarshall(){
String str1 = "2001-07-04T12:08:56.235-07:00"; // Example from http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html DateFormat formatter = getDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Date date = formatter.parse(str1);
String str2 = formatter.format(date);
assertEquals(str1.equals(str2)); //This fails }

我注意到的是 str1 = "2001-07-04T12:08:56.235-07:00";和 str2 = 2001-07-04T14:08:56.235-05:00

我需要做什么来确保两个日期相同?

谢谢

最佳答案

这两个字符串表示同一时刻 - 只是其中一个的 UTC 偏移量与另一个不同。

这是意料之中的 - Date 代表一个时间点,看起来您已经使用 SimpleDateFormat 设置了默认系统时区。因此,任何时候您解析的值的偏移量不同于系统默认时区中时间点的偏移量时,您将无法往返字符串。

如果您比较 Date 值,您会发现它们 相等 - 换句话说,如果您比较 formatter.parse(str2)date,应该没问题。

或者,使用始终采用 UTC 的格式,而不是指定时区偏移量的格式...或者使用可以保留偏移量的不同数据类型。

关于java - SimpleDateFormat.parse 和 SimpleDateFormat.format 不产生相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463256/

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