【发布时间】:2019-06-26 12:25:25
【问题描述】:
我想将日期转换为 GMT。
我在 BST 中得到一个日期,我想将其转换为 GMT 而不进行时区转换。 例子: **如果 BST 日期是:Wed June 26 13:30:13 BST 2019
我想将其转换为 2019 年 6 月 26 日星期三 13:30:13 GMT**
我想忽略时区信息并返回与 GMT 相同的日期。
为此我正在尝试
private SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
private SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
private SimpleDateFormat dateFormatGmtText = new SimpleDateFormat("EEE dd MMM yyyy HH:mm:ss 'GMT'");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
String textDate = dateFormatLocal.format(date);
//Date is Wed June 26 13:30:13 BST 2019
private Date toGMTDate(final Date date) {
String textDate = dateFormatLocal.format(date);
try {
String[] dateParts = textDate.split("\\+");
textDate = dateParts[0] + "+0000";
return dateFormatGmt.parse(textDate);
} catch (ParseException e) {
return null;
}
}
private String toGMT(final Date date) {
return dateFormatGmtText.format(toGMTDate(date));
}
当我调用toGMT 时,它返回Wed 26 Jun 2019 14:30:13 GMT
我不知道为什么会这样? 这里有什么问题?
【问题讨论】:
-
A
Date只是自 unix 纪元以来的毫秒数。它没有时区。目前尚不清楚您的数据来自何处或采用何种格式,但这听起来像是在早期修复得更好。我还强烈建议使用 java.time 而不是Date、SimpleDateFormat等。 -
我建议你不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用ZonedDateTime、OffsetDateTime和DateTimeFormatter,均来自java.time, the modern Java date and time API。 -
您没有在 BST 中获得
Date,并且您无法在 GMT 中转换为Date。老式的Date对象既不能有时区,也不能有 GMT 偏移量。 -
我认为这是SimpleDateFormat returns wrong time zone during parse和其他问题的重复。
-
既然你想要它作为一个字符串,为什么不直接用“GMT”替换字符串“BST”并完成它呢?