繁体   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