我为什么不在Java TimeZone中使用缩写

时间:2014-08-19 14:44:58

标签: java datetime

核心问题:“GMT”TimeZone根据需要返回内容。 “etc / GMT”返回另外的“+0:00”,这是不希望的。 “etc / Greenwich”似乎让人们误以为它指的是一个特定的位置,这是不可取的。

那么为什么使用“GMT”是不好的做法?

原帖

根据Java Doc

  

请注意,缩写的支持仅适用于JDK 1.1.x兼容性,并且应使用全名。

我正在尝试使用这个,所以我去了“etc / GMT”但是当我使用输出看起来像...

但我不想要多余的+0.00。如果我使用缩写,它不会显示+0.00,也不会显示等/格林威治。这两个选项看起来都很糟糕,因为一个明确错误,因为doc(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();
}

返回以下内容......

11-Aug-14 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(TM)SE运行时环境(构建   1.7.0_51-b13)Java HotSpot(TM)64位服务器VM(内置24.51-b03,混合模式)

我明白了......

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

1 个答案:

答案 0 :(得分:1)

不建议使用缩写,因为它们不是唯一的。例如,EST代表美国东部标准时间和澳大利亚东部。

在您的情况下,您应该使用一个与GMT等效的时区:

其他/ GMT
ETC / UTC
等/通用

请注意,这些不是缩写。这些都是全名。