我们在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
我需要做些什么才能确保两个日期相同?
由于
答案 0 :(得分:3)
这两个字符串代表同一时刻 - 它只是一个具有与另一个不同的UTC偏移。
这是预期的结果 - 只有Date
表示某个时间点,看起来您已使用默认系统时区设置了SimpleDateFormat
。因此,每当您解析具有不同于系统默认时区中的时间偏移量的值的值时,您将无法对该字符串进行往返。
如果您比较Date
值,您会发现 相等 - 换句话说,如果您将formatter.parse(str2)
与date
进行比较,则应该没事。
或者,使用始终为UTC的格式,而不是指定时区偏移的格式...或使用可以保留偏移量的其他数据类型。