最初我在 Actionscript 中寻找解决方案。这个问题的重点是算法,当时钟必须切换夏令时时,它会检测精确的分钟。
因此,例如在 10 月 25 日到 31 日之间,我们必须检查,如果实际日期是星期天,是在 2 点之前还是之后......
最初我在 Actionscript 中寻找解决方案。这个问题的重点是算法,当时钟必须切换夏令时时,它会检测精确的分钟。
因此,例如在 10 月 25 日到 31 日之间,我们必须检查,如果实际日期是星期天,是在 2 点之前还是之后......
没有真正的算法来处理夏令时。基本上每个国家都可以自行决定 DST 何时开始和结束。作为开发人员,我们唯一能做的就是使用某种表格来查找它。大多数计算机语言都在语言中集成了这样的表格。
在 Java 中,您可以使用TimeZone类的inDaylightTime
方法。如果您想知道特定年份 DST 开始或结束的确切日期和时间,我建议使用Joda Time。我看不到仅使用标准库来找出这一点的干净方法。
以下程序是一个示例:(请注意,如果某个时区在某年没有 DST,它可能会产生意想不到的结果)
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
public class App {
public static void main(String[] args) {
DateTimeZone dtz = DateTimeZone.forID("Europe/Amsterdam");
System.out.println(startDST(dtz, 2008));
System.out.println(endDST(dtz, 2008));
}
public static DateTime startDST(DateTimeZone zone, int year) {
return new DateTime(zone.nextTransition(new DateTime(year, 1, 1, 0, 0, 0, 0, zone).getMillis()));
}
public static DateTime endDST(DateTimeZone zone, int year) {
return new DateTime(zone.previousTransition(new DateTime(year + 1, 1, 1, 0, 0, 0, 0, zone).getMillis()));
}
}