簡體   English   中英

Java簡單日期格式英國時間

[英]Java simple date format british time

我使用簡單的日期格式,允許用戶指定他們發送數據的時區:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,z");

這很好用:例如

df.parse("2009-05-16 11:07:41,GMT");

但是,如果有人總是在倫敦時間發送時間(即考慮到夏令時),那么要添加的approriate時區字符串是什么? 例如,這不起作用:

df.parse("2009-05-16 11:07:41,Western European Time");  
System.out.println(date);
Sat May 16 12:07:41 BST 2009

我希望將英國時間與夏令時相匹配。

謝謝。

在夏令時,它是BST 在今年剩下的時間里,這是GMT

我建議您使用通用名稱(全年),即Europe/London 你可以使用這樣的東西:

    String userInput = "2009-05-16 11:07:41,Europe/London";
    String[] tokens = userInput.split(",");

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    df.setTimeZone(TimeZone.getTimeZone(tokens[1]));
    System.out.println(df.parse(tokens[0]));

這種情況下的輸出是:

Sat May 16 11:07:41 GMT+01:00 2009

那么究竟是什么問題 - 你應該使用TimeZone ID? 以下將打印所有可用時區標識符的列表:

for (String id : TimeZone.getAvailableIDs()) {
    System.out.println(id);
}

我認為不可能單獨使用SimpleDateFormat做你想做的事情。 TimeZone.parse(String)僅接受時區,而不接受時區ID,例如:

Time Zone ID       Time Zone (Winter)      Time Zone (Summer)
-------------------------------------------------------------
Europe/London      GMT                     BST

如果解析(...)接受歐洲/倫敦,春季將有一個小時不是有效的歐洲/倫敦時間,而秋天的一小時將映射到兩個UTC時間。

我認為您可以做的最好的是遵循Bruno Rothgiesser的建議,但是您可以接受時區ID作為單獨的用戶輸入,或者執行額外的字符串處理步驟以將時區ID與用戶輸入字符串分開,並使用它弄清楚用戶是否可能意味着GMT或BST。 用戶的Locale可能是一種更好的方法來計算他/她的意思 - 雖然這個想法涉及一些假設。

“用戶可能意味着什么”算法必須處理兩種特殊情況 - 如果你可能有其中一種,你可以使用TimeZone.inDaylightTime(Date)和userTime +/- 1小時來計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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