java Linux服务器显示UTC而不是EST,本地显示EST
我很难理解为什么下面代码的时区总是显示UTC而不是EST。在我的本地计算机上,它显示EST,即使我在MST时间,但在实际服务器上,它仍显示UTC。有线索吗
Mon Nov 9 2015 1:58:49 PM UTC
@JsonIgnore
public String getDateCreatedFormatted() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(getDateCreated());
calendar.setTimeZone(TimeZone.getTimeZone("EST"));
SimpleDateFormat format = new SimpleDateFormat("EEE MMM d yyyy h:mm:ss a z");
return format.format(calendar.getTime());
}
# 1 楼答案
爪哇。时间
java.util
日期时间API及其格式化APISimpleDateFormat
已经过时且容易出错。建议完全停止使用它们,并切换到modern Date-Time API*使用
java.time
现代日期时间API的解决方案:ONLINE DEMO
注意:Never use SimpleDateFormat or DateTimeFormatter without a Locale
从Trail: Date Time了解有关现代日期时间API的更多信息
*无论出于何种原因,如果您必须坚持使用Java 6或Java 7,您可以使用ThreeTen-Backport来支持大部分Java。Java 6&;的时间功能;7.如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请选中Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。
# 2 楼答案
您已将日历设置为EST,但尚未在
SimpleDateFormat
上设置时区,这是用于格式化的时区。只需使用:在格式化
Date
之前。从外观上看,你根本不需要Calendar
:此外,我强烈建议您使用上述完整的时区ID,而不是像“EST”这样模棱两可的缩写。(这里有两个问题——第一,EST在不同的地方可能意味着不同的东西;第二,美国EST应该始终意味着东部标准时间,而我假设您希望使用东部时间格式化,标准或日光取决于夏令时是否生效。)