2014-01-22 87 views
0
public class TestDate { 
    public static void main(String[] args) { 
      Date data1 = new Date(25682400000L); 
      Date data2 = new Date(25686000000L); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:HH-mm-ss"); 
      TimeZone cdtTime = TimeZone.getTimeZone("CST"); 
      sdf.setTimeZone(cdtTime); 
      String s1 = sdf.format(data1); 
      String s2 = sdf.format(data2); 
      System.out.println(s1); 
      System.out.println(s2); 
    } 
} 

後運行上面的代碼,結果:java的SimpleDateFormat的CST不同的日期,但同樣的結果

1970-10-25:01-00-00 
1970-10-25:01-00-00 

有人能告訴我爲什麼感謝

回答

0

使用大寫L

使用的?長整型文字末尾的大寫字母L可使編號更易於閱讀。小寫字母l通常看起來像許多字體中的一個1

25682400000L而不是25682400000l

1小時的時差

25686000000L - 25682400000L = 3600000L

3600000毫秒=3600秒=60分鐘= 1小時

如果他們完全是一個小時的間隔,爲什麼你看到凌晨1點了都?請繼續閱讀。

夏令時

如果「CST」,你的意思是美國,然後是Daylight Savings Time(DST)的瘋狂的中部去拉你一招。 1970年10月25日凌晨2點是DST ended in that part of the United States。所以在凌晨2點的時候,時鐘回到了凌晨1點。所以那天早上有兩個「上午」時間。

請參閱下面的代碼示例,並注意兩條線都表示上午1點,但它們的時區偏移量(結尾處)不同(-5 vs -6)。

3字母代碼

避免使用三個字母的時區代碼。問題包括:

  • 它們既不標準也不唯一。多個不同的時區可以共享相同的代碼。
  • 他們混淆不清,因爲人們將他們與夏令時相當。

要麼使用:

喬達時間

與java.util.Date,與Java捆綁.Calendar和java.text.SimpleDateFormat的班是出了名麻煩。避免它們。

這種日期時間的工作是如此使用容易得多之一:

  • Joda-Time
  • 新java.time *類(在Java中8)
long data1 = 25682400000L; 
long data2 = 25686000000L; 

DateTimeZone timeZone = DateTimeZone.forID("America/Chicago"); 

DateTime dateTime1 = new DateTime(data1, timeZone); 
DateTime dateTime1_UTC_GMT = dateTime1.toDateTime(DateTimeZone.UTC); 

DateTime dateTime2 = new DateTime(data2, timeZone); 
DateTime dateTime2_UTC_GMT = dateTime2.toDateTime(DateTimeZone.UTC); 

轉儲到控制檯...

System.out.println("dateTime1: " + dateTime1); 
System.out.println("dateTime1_UTC_GMT: " + dateTime1_UTC_GMT); 

System.out.println("dateTime2: " + dateTime2); 
System.out.println("dateTime2_UTC_GMT: " + dateTime2_UTC_GMT); 

運行時...

dateTime1: 1970-10-25T01:00:00.000-05:00 
dateTime1_UTC_GMT: 1970-10-25T06:00:00.000Z 

dateTime2: 1970-10-25T01:00:00.000-06:00 
dateTime2_UTC_GMT: 1970-10-25T07:00:00.000Z