我有一个 Java 类,它接受一个位置的纬度/经度,并在夏令时打开和关闭时返回 GMT 偏移量。我正在寻找一种简单的方法来确定当前日期是否在夏令时,以便在 Java 中应用正确的偏移量。目前我只对美国时区执行此计算,尽管最终我也想将其扩展到全球时区。
问问题
102326 次
5 回答
83
这是提出问题的机器的答案:
TimeZone.getDefault().inDaylightTime( new Date() );
试图为客户端解决这个问题的服务器将需要客户端的时区。请参阅@Powerlord 答案了解原因。
对于任何特定的时区
TimeZone.getTimeZone( "US/Alaska").inDaylightTime( new Date() );
于 2009-06-29T20:57:06.977 回答
53
于 2015-09-11T16:47:34.667 回答
10
TimeZone tz = TimeZone.getTimeZone("EST");
boolean inDs = tz.inDaylightTime(new Date());
于 2009-06-29T20:58:36.553 回答
3
您将不得不使用这些坐标做更多的工作,并找出它们所在的时区。一旦您知道哪个时区,isDayLight() 方法就会很有用。
例如,您无法判断 -0500 是 EST(美国/加拿大东部标准时间)、CDT(美国/加拿大中部夏令时间)、COT(哥伦比亚时间)、AST(巴西英亩标准时间)、ECT(厄瓜多尔)时间)等...
其中一些可能支持也可能不支持夏令时。
于 2009-06-29T21:03:30.803 回答
1
Joda Time包含将为您计算偏移量的处理方法。请参阅DateTimeZone.convertLocalToUTC(...)
为了补充这一点,您需要使用您的纬度/经度信息查找当前时区。 GeoNames为其 web 服务提供了一个 java 客户端,以及一个简单的 web-request 框架(即http://ws.geonames.org/timezone?lat=47.01&lng=10.2)
于 2009-06-29T21:06:48.660 回答