核心问题:“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
答案 0 :(得分:1)
不建议使用缩写,因为它们不是唯一的。例如,EST代表美国东部标准时间和澳大利亚东部。
在您的情况下,您应该使用一个与GMT等效的时区:
其他/ GMT
ETC / UTC
等/通用
请注意,这些不是缩写。这些都是全名。