这是否适用于夏令时?

Mav*_*ave 5 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)
Run Code Online (Sandbox Code Playgroud)

编辑:我的目的是检查someTime是在同一天还是在前一天没有做太多重量级的东西.

这是否可以节省日光?为什么?如果没有,最简单的逻辑是什么?

Jon*_*eet 4

您当前的代码不会对本地时区执行任何操作 - 所有内容均以 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
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这里没有什么低级别的内容 - 我们只是计算出每个值(现在和那时)属于给定时区的日期,然后进行比较。