簡體   English   中英

Java中帶有SimpleDateFormat的TimeZone轉換

[英]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"));

有兩件事。

sdfDate的對象,它表示特定的時間點(自另一個稱為“紀元”的瞬間起經過的毫秒數)。 沒有該對象已知的格式。 而此對象的打印方式僅由其類的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.

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