[英]StringDate to Date coming in different Time in SimpleDateFormat in java
[英]java SimpleDateFormat CST different date but same result
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);
}
}
運行上面的代碼后,結果為:
1970-10-25:01-00-00
1970-10-25:01-00-00
有人可以告訴我為什么嗎?
L
在長整數文字的末尾使用大寫字母L
可使數字更易於閱讀。 在許多字體中,小寫字母l
往往看起來像一個1
。
寫25682400000L
而不是25682400000l
。
25686000000L-25682400000L = 3600000L
3600000毫秒= 3600秒= 60分鍾= 1小時
如果兩點鍾正好相隔一個小時,為什么您都看到凌晨1點呢? 繼續閱讀。
如果用“ CST”表示您是美國的中部地區,那么夏時制 (DST)的瘋狂就給您帶來了麻煩。 1970年10月25日凌晨2點( DST)在美國那部分地區結束 。 因此,在凌晨2點,時鍾回滾到凌晨1點。 因此,那天早上有兩次“ 1 AM”發生。
請參見下面的代碼示例,請注意兩條線都說凌晨1點,但它們的時區偏移量(結束時)不同(-5 vs -6)。
避免使用三個字母的時區代碼。 問題包括:
可以使用:
眾所周知,與Java捆綁在一起的java.util.Date,.Calendar和java.text.SimpleDateFormat類非常麻煩。 避免他們。
使用以下任一方法, 這樣的日期時間工作都非常容易:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.