2010-03-29 44 views
4

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

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

这是正确的吗?

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

感谢

+0

如果你正在写一个服务器,共同范式总是在内部使用UTC时间,然后在UI中显示它时使用DateFormatter格式化。 – Kylar 2010-03-29 18:22:25

+2

@Kylar:仅使用UTC不是特定于服务器应用程序,而应该由几乎任何应用程序完成。 – Joey 2010-03-29 18:23:20

+1

我不会假设知道所有的应用程序;) – Kylar 2010-03-29 18:24:16

回答

9

你并不需要一个Calendar,只有TimeZone

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

其他人表示,这可能不是一个好主意 - 我相信这取决于你的情况,但使用UTC肯定是需要考虑的事情。但是,我认为你已经错过了一些东西:自1970年1月1日以来发生的秒数UTC(这是Unix时代总是如何定义的 - 实际上与伦敦相同,因为在当日的偏移为0)是所有这些表述均获得:

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

如果你仔细想想,因为毫秒数特定时刻不会改变取决于哪个时区你”重新英寸

哦,一个d正常的建议 - 要获得更好的日期和时间API,请参见Joda Time

+0

英国不也使用DST吗?实际上,它与UTC有所不同。 – Joey 2010-03-29 18:39:53

+1

@JohannesRössel:DST与否,从时代开始经过的(毫秒)秒数与夏令时间无关。如果是6PM或7PM,* NOT *会改变自纪元以来经过的时间(毫秒)。分钟不是一个固定的单位(你可以有59或61秒的分钟),天不是一个固定的单位(你可以有23或25小时的一天),但秒和毫秒是一个固定的单位。这就是为什么你总是应该在(毫秒)秒内测量时间,并在纪元(毫秒)内存储日期/时间。只有在向最终用户显示时进行转换。 – SyntaxT3rr0r 2010-03-29 19:56:25

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())); 
相关问题