在伦敦获得时间

时间:2010-03-29 18:19:51

标签: java datetime calendar dst

如何在伦敦获得当前的当地挂钟时间(自1970年1月1日以来的毫秒数)?由于我的应用程序可以在任何位置的服务器上运行,我想我需要使用TimeZone“Europe / London”。我还需要考虑夏令时,即应用程序应该在“夏天”增加一个小时。

我更喜欢使用标准的java.util库。

这是对的吗?

TimeZone tz = TimeZone.getTimeZone("Europe/London") ;
Calendar cal = Calendar.getInstance(tz);
return cal.getTime().getTime() + tz.getDSTSavings();

由于

3 个答案:

答案 0 :(得分:10)

您不需要Calendar,只需要TimeZone

TimeZone london = TimeZone.getTimeZone("Europe/London");
long now = System.currentTimeMillis();
return now + london.getOffset(now);

答案 1 :(得分:4)

其他人说这样做可能不是一个好主意 - 我相信这取决于你的情况,但使用UTC肯定是需要考虑的事情。

但是,我认为你在这里错过了一些东西:自1970年1月1日以来发生的秒数 UTC (这是Unix时代总是被定义的 - 并且实际上与在伦敦,因为该日期的偏移量为0)可通过以下任何表达式获得:

System.currentTimeMillis()
new Date().getTime()
Calendar.getInstance().getTime().getTime()

如果您考虑一下,自特定时刻以来的毫秒数不会因您所在的时区而改变。

哦,这是正常的建议 - 要获得更好的日期和时间API,请参阅Joda Time

答案 2 :(得分:2)

获取伦敦当前时间:

SimpleDateFormat f = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
f.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(f.format(GregorianCalendar.getInstance().getTime()));