我怎样才能得到当前本地挂钟时间(以毫秒计的数量自1970年1月1日)在伦敦?由于我的应用程序可以在任何位置的服务器上运行,我想我需要使用“欧洲/伦敦”的时区。我还需要采取夏令考虑即应用程序应在“夏天”过程中添加一个小时。

我宁愿使用标准的java.util库。

这是正确的吗?

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

由于

有帮助吗?

解决方案

我不知道这是什么数量表示,自“1970年以来1月1日米利斯的数量”不改变基于位置或夏令时。但是,也许这是计算对您有用:

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

大多数应用程序使用的是UTC时间或本地时间更好的服务;这实在是既不。你可以得到UTC时间和时间在这样一个特定的区域:

Instant now = Instant.now(); /* UTC time */
ZonedDateTime local = now.atZone(ZoneId.of("Europe/London"));

其他提示

还有人说,这可能不是一个好主意,这样做 - 我认为这取决于你的情况,但使用UTC肯定是要考虑的事情。

不过,我认为你已经错过了一些东西:既然已经发生的秒数1970年1月1日的 UTC 的(这是怎么Unix纪元总是被定义 - 实际上是一样的在伦敦,如在该日期的偏移为0)是与任何这些表达式获得:

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

如果你仔细想想,自从毫秒数的那个特定时刻的取决于你在哪个时区不发生变化。

呵呵,和正常的建议 - 为一个更好的日期和时间API,请参见约达时间

要获取当前时间在伦敦:

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()));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top