// 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是在同一天还是在前一天没有做太多重量级的东西.
这是否可以节省日光?为什么?如果没有,最简单的逻辑是什么?
您当前的代码不会对本地时区执行任何操作 - 所有内容均以 UTC 形式有效(当然就您的代码而言,它以“自 Unix 纪元以来的毫秒数”进行处理)。
如果您想让代码对时区敏感,您应该使用(按优先顺序):
java.time(查看ZonedDateTime示例Clock)java.util.Calendar和java.util.TimeZone尽可能使用更高级别的抽象 - 您的代码应该尽可能少地进行低级别的时间操作。
编辑:现在我们知道了目的,下面是 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)
请注意,这里没有什么低级别的内容 - 我们只是计算出每个值(现在和那时)属于给定时区的日期,然后进行比较。
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |