java - 为什么我不应该在 Java TimeZone 中使用缩写

标签 java datetime

核心问题:“GMT”时区返回所需的内容。 “etc/GMT”返回时带有额外的“+0:00”,这是不需要的。 “etc/Greenwich”似乎让人们感到困惑,它指的是一个特定的位置,这是不希望的。

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

原帖

根据 Java Doc

Note that the support of abbreviations is for JDK 1.1.x compatibility only and full names should be used.

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

但我不想要多余的+0.00。如果我使用缩写,它不会显示 +0.00,etc/Greenwich 也不会显示。这两个选项看起来都很糟糕,因为在给定文档(GMT)的情况下,一个选项明显错误,而另一个选项对于某个位置(etc/greenwich)来说有点过于具体。另一种削减 +0.00 的选项似乎也不是一个好的解决方案。

为什么不再支持缩写,如果我不想要 +0.00,正确的时区是什么

使用 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 version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

我明白了...

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

最佳答案

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

就您而言,您应该使用相当于 GMT 的时区之一:

等/GMT
等/UTC
等等/通用

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

关于java - 为什么我不应该在 Java TimeZone 中使用缩写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25386425/

相关文章:

java - 解析 xml 时内部标签的困难

java - Java Web Start 应用程序中的 JasperReports

java - ZoneOffset.UTC 和 ZoneId.of ("UTC"有什么区别?

python - 如何使用 pandas.date_range() 获取在指定开始日期和结束日期之间具有 n 个指定时间段(相等)的时间序列

c# - 无法从另一个类调用方法

javascript - 以本地时区解析 JavaScript 日期

java - 如何将 SPDY 与 HttpClient 4 一起使用?

java - 可运行函数取决于构造函数

java - 这个代码段的增长顺序是什么?稍微解释一下

php - 在 php 和 mySQL 中将 DATE 转换为 DATETIME