java - 这是否考虑了夏令时?

标签 java

// someTime is epoch in millis (UTC)

final long timeNow = new Date().getTime();
final long midnight = timeNow - timeNow % (3600 * 24 * 1000L);
final long yesterdayMidnight = midnight - (3600 * 24 * 1000L);


// check if same day.
if (someTime >= midnight)
   // do something

// check if yesterday
if (someTime >= yesterdayMidnight)

已编辑:我的目的是检查 someTime 是在同一天还是在前一天,而不做太多重量级的东西。

这是否考虑了夏令时?为什么?如果不是,最简单的逻辑是什么?

最佳答案

您当前的代码不会对本地时区做任何事情 - 一切都在 UTC 中,有效地(当然就您的代码而言,它处理的是“自 Unix 纪元以来的毫秒数”) .

如果你想让你的代码时区敏感,你应该使用(按优先顺序):

尽可能使用更高级别的抽象 - 您的代码应该尽可能少地对时间进行低级操作。

编辑:既然我们知道了目的,下面是 Joda Time 中的示例实现:

public void calculate(Instant now, Instant then, DateTimeZone zone) {
    LocalDate today = new LocalDate(now, zone);
    LocalDate otherDay = new LocalDate(then, zone);
    if (otherDay.equals(today)) {
        // Today day
    } else if (otherDay.equals(today.minusDays(1)) {
        // Yesterday
    } else {
        // Neither today nor yesterday
    }
}

请注意这里没有任何低级别 - 我们只是计算出每个值(不时)在给定时区内的哪个日期,然后比较它们。

关于java - 这是否考虑了夏令时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964732/

相关文章:

java - 运行应用程序时 eclipse 挂起(应用程序运行正常,eclipse 挂起)

java - 增加 Spark on Yarn 中的 Java 堆大小

java - ConcurrentModificationException 即使在 LinkedHashMap 上使用 Collections.sychronizedMap

java - 在自由范围内生成吸血鬼数字

java - 如何在 Java 或 Python 中使用文件系统缓存?

java - 优化阵列旋转程序

java - 如何使用 google Guice 创建相同类型的多个实例

java - 访问addMouseListener()方法内部的方法

java - Hibernate 堆栈溢出错误

java - 用java发送电子邮件