簡體   English   中英

為什么我不應該在Java TimeZone中使用縮寫

[英]Why should I not use abbreviations in Java TimeZone

核心問題:“ GMT” TimeZone返回所需的內容。 “ etc / GMT”返回不需要的附加“ +0:00”。 “ etc / Greenwich”似乎使人們誤以為它指的是特定位置,這是不希望的。

那么,為什么不習慣使用“ GMT”呢?

原始帖子

根據Java文檔

請注意,縮寫的支持僅出於JDK 1.1.x兼容性的考慮,應使用全名。

我試圖使用它,所以我去了“ etc / GMT”,但是當我使用輸出時,看起來像...

但我不要多余的+0.00。 如果使用縮寫,則不會顯示+0.00,而etc / Greenwich也不會。 這兩個選項似乎都是不好的,因為給定文檔(GMT)時,一個明顯是錯誤的,而另一個對於位置(etc / greenwich)太具體了。 修整+0.00的另一種選擇似乎也不是一個好的解決方案。

為什么不再支持縮寫?如果我不希望+0.00,可以使用什么正確的TimeZone?

使用Java 1.7.51(也包括Groovy代碼)

添加代碼

private String formatET(Date etDate){
    StringBuilder sb = new StringBuilder();
    SimpleDateFormat etFormat = new SimpleDateFormat("dd-MMM-yyy kk:mm zzz")
    TimeZone etTimeZone = TimeZone.getTimeZone("America/New_York")
    etFormat.setTimeZone(etTimeZone)
    sb.append(etFormat.format(etDate))

    TimeZone gmtTimeZone = TimeZone.getTimeZone("etc/GMT")
    SimpleDateFormat gmtFormat = new SimpleDateFormat("kk:mm zzz")
    gmtFormat.setTimeZone(gmtTimeZone)
    sb.append(" (${gmtFormat.format(etDate)})")
    sb.toString();
}

這將返回以下內容...

2014年8月11日11:48 EDT(15:48 GMT + 00:00)

我試圖將其添加到此...

import java.text.SimpleDateFormat;
import java.util.*;

public class HelloWorld{

     public static void main(String []args){
        Date d = new Date();
        SimpleDateFormat etFormat = new SimpleDateFormat("dd-MMM-yyy kk:mm zzz");
        TimeZone etTimeZone = TimeZone.getTimeZone("etc/GMT");
        etFormat.setTimeZone(etTimeZone);
        System.out.println(etFormat.format(d));
     }
}

放到這里...

http://www.compileonline.com/compile_java_online.php

它就像我想要的那樣工作。 當我回到本地使用

Java版本“ 1.7.0_51” Java™SE運行時環境(內部版本1.7.0_51-b13)Java HotSpot(TM)64位服務器VM(內部版本24.51-b03,混合模式)

我懂了...

2014年8月19日15:53 GMT + 00:00

不建議使用縮寫,因為它們不是唯一的。 例如,EST表示美國和澳大利亞東部的東部標准時間。

在您的情況下,您應該使用與GMT等效的時區之一:

ETC / GMT
ETC / UTC
ETC /通用

請注意,這些不是縮寫。 這些是全名。

暫無
暫無

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

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