簡體   English   中英

SimpleDateFormat.parse和SimpleDateFormat.format不產生相同的值

[英]SimpleDateFormat.parse and SimpleDateFormat.format not producing identical values

我們在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的格式,而不是指定時區偏移量的格式...或使用可以保留偏移量的其他數據類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM