[英]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.