BST时间错了

时间:2018-03-26 09:09:39

标签: java groovy

使用以下代码,每个时区都正确打印除BST

之外的值
​import java.text.*;

def format = "yyyy-MM-dd HH:mm:ssXXX"
def dt = new Date();
println dt;

SimpleDateFormat utcFormat = new SimpleDateFormat(format)
utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"))
println utcFormat.format(dt)

SimpleDateFormat istFormat = new SimpleDateFormat(format)
istFormat .setTimeZone(TimeZone.getTimeZone("IST"))
println istFormat.format(dt)

SimpleDateFormat cetFormat = new SimpleDateFormat(format)
cetFormat.setTimeZone(TimeZone.getTimeZone("CET"))
println cetFormat.format(dt)

SimpleDateFormat bstFormat = new SimpleDateFormat(format)
bstFormat.setTimeZone(TimeZone.getTimeZone("BST"))
println bstFormat.format(dt)

输出:

Mon Mar 26 09:04:14 UTC 2018

2018-03-26 09:04:14Z

2018-03-26 14:34:14 + 05:30

2018-03-26 11:04:14 + 02:00

2018-03-26 15:04:14 + 06:00

这里BST时间错了。这有什么不对吗?

2 个答案:

答案 0 :(得分:1)

您似乎期望BST成为英国夏令时,但在这种情况下,它代表Bangladesh Standard Time。 另请参阅What does Java's BST ZoneId represent?

来自答案:

以下代码有效

SimpleDateFormat bstFormat = new SimpleDateFormat(format)
bstFormat.setTimeZone(TimeZone.getTimeZone("Europe/London"))
println bstFormat.format(dt)

答案 1 :(得分:1)

我运行了你的代码,发现BST的时间恰到好处。在UTC时间09:04:14添加6小时的偏移量给出了15:04:14。我认为你与时区的首字母缩略词混淆了。

如果JVM中的时区数据库不正确,您可以按TimeZone.getTimeZone("Europe/London");

获取英国夏令时区