[英]TimeZone Conversion with SimpleDateFormat in Java
我有一個SimpleDateFormat解析器,它以這種方式解析:
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
這給了我星期六2013年1月26日03:05:14
我在這里想念什么?
首先,DD代表一年中的每一天,您應該使用dd代替。
另外,如果要以特定格式打印日期,則需要使用兩個SimpleDateFormat
。
SimpleDateFormat.parse
返回一個Date
對象,該對象表示您以給定格式指定的日期。
Date
對象本身將保存為常規Date
, 不附帶任何格式 。
如果要以特定格式打印,則需要使用另一種SimpleDateFormat
和調用format
方法。
您應該使用格式
SimpleDateFormat sdf1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:SS z");
String sdf = sdf1.format(sdf1.parse("2013-10-25 17:35:14 EDT"));
有兩件事。
sdf
是Date
的對象,它表示特定的時間點(自另一個稱為“紀元”的瞬間起經過的毫秒數)。 沒有該對象已知的格式。 而此對象的打印方式僅由其類的toString
方法處理,該方法以以下格式打印日期:
dow mon dd hh:mm:ss zzz yyyy
這正是您在輸出中看到的。 請注意,在這種情況下,將打印運行程序的機器的時區。 如果希望以所選格式打印該對象,則應使用DateFormat
。 要獲取特定時區的輸出,必須將其顯式地告知DateFormat
對象(請參見下文)。
另一件事是您應該在模式中使用dd
而不是DD
。 D
是一年中的一天, d
是月中的一天,我相信這是您想要的。 現在牢記這兩點,這是解決問題的方法之一:
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("EDT")); // Time Zone for output
Date d = sdf.parse("2013-10-25 17:35:14 EDT");
System.out.println(sdf.format(d)); // You need format method
輸出:
2013-10-25 17:35:14 EDT
人們回答沒有到達這里的是更多的問題:
2013-10-25 17:35:14 EDT != Sat Jan 26 03:05:14 IST 2013
我認為這是因為“ EDT”是時區,因此在英國東部夏令時(EDT)為17:35時在英國是3:05,而忽略了夏令時調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.