2016-08-28 21 views
0

我有下面的代碼片段:日期時間和簡單的日期時間格式的結果是不同的

 DateTime dateTime = new DateTime().withZone(DateTimeZone.forID("America/Chicago")) 
       .withYear(2016) 
       .withMonthOfYear(8) 
       .withDayOfMonth(25) 
       .withHourOfDay(12) 
       .withMinuteOfHour(37); 

     System.out.println("DateTime: "); 
     System.out.println(dateTime.toDate().getTime()); 

     String str = "2016-8-25 12:37 AM CST"; 
     SimpleDateFormat sdf = new SimpleDateFormat("YYYY-M-dd hh:mm a z"); 

     System.out.println("SDF: "); 
     try { 
      System.out.println(sdf.parse(str).getTime()+""); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

按照我的理解,都代表同一日期(因此時代應該是相同的爲好)。然而,結果我得到的是:

DateTime: 
1472146669119 
SDF: 
1451198220000 

如果我更改時區以CDT,然後我得到:

DateTime: 
1472146668746 
SDF: 
1451194620000 

所以我希望某種靈魂會賜教(幫助這個可憐的靈魂)。

感謝

更新:

我使用以下修改後的代碼:

 DateTime dateTime = new DateTime(2016, 8, 25, 12, 37, DateTimeZone.forID("America/Chicago")); 

     System.out.println("DateTime: "); 
     System.out.println(dateTime.toDate().getTime()); 

     String str = "2016-8-25 12:37 AM CDT"; 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm a z"); 

     System.out.println("SDF: "); 
     try { 
      System.out.println(sdf.parse(str).getTime()+""); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

現在我越來越:

DateTime: 
1472146620000 
SDF: 
1472103420000 
+3

旁註:爲什麼你在你的模式中使用'YYYY'? –

+0

你似乎沒有設置SimpleDateFormat的TimeZone。 – jtahlborn

+0

好抓Sotirios! – user1539343

回答

0

在您發佈代碼的第二位,在此日期/時間:

new DateTime(2016, 8, 25, 12, 37, DateTimeZone.forID("America/Chicago")); 
//      ^- midday 

...是中午經過37分鐘8月25日2016年

此日期:

String str = "2016-8-25 12:37 AM CDT"; 

...是在2016年8月25日午夜後37分鐘。

對於日期匹配我期望冷杉t應該是:

new DateTime(2016, 8, 25, 0, 37, DateTimeZone.forID("America/Chicago")); 
//      ^- midnight 
0

這裏:

System.out.println(sdf.parse(str).getTime()+""); 

您正在使用格式化的字符串(不包括秒),並將其解析回日期。有關哪一秒的信息丟失,所以時間四捨五入至:12:37:00。

+0

這就是我想要的:12:37:00 – user1539343