时间戳将存储在数据库中。什么是解决方案来确定一个名为“b”的时间戳是否是另一个时间戳之后的一天,称为“a”?
时区将作为参数提供。
例如,考虑:
Instant a = Instant.ofEpochSecond(1511928000L); // 11/29/17 4 AM
Instant b = Instant.ofEpochSecond(1511935200L); // 11/29/17 6 AM
如果用户想知道b是否是东区时区(-5小时)之后的第二天,该程序将进行比较:
在11/28/17 11 PM和即时b在11/29/17凌晨1点即时a,并确定b是a之后的第二天。
答案 0 :(得分:3)
找到解决方案:
public static void main(String[] args) {
Instant a = Instant.ofEpochSecond(1511928000L); // 11/29/17 4 AM
Instant b = Instant.ofEpochSecond(1511935200L); // 11/29/17 6 AM
ZoneId localZone = ZoneId.of("America/New_York"); // Can be any zone ID
if (isBOneDayAfterA(a, b, localZone)) {
System.out.println("b is one day after a!");
} else {
System.out.println("b is NOT one day after a");
}
}
public static boolean isBOneDayAfterA(Instant a, Instant b, ZoneId localZone) {
LocalDateTime aAdjusted = LocalDateTime.ofInstant(a, localZone);
LocalDateTime bAdjusted = LocalDateTime.ofInstant(b, localZone);
LocalDate aDate = aAdjusted.toLocalDate();
LocalDate bDate = bAdjusted.toLocalDate();
return bDate.minusDays(1).equals(aDate);
}
答案 1 :(得分:2)
可以使用REINDEX SYSTEM
获取正确的区域ID。
这对于白天特定的白天保存非常有用。
除了ZonedDateTime之外,还有以下几点:
ZoneId.getAvailableZoneIds()
在评论出更好的解决方案之后 - 在不同年份的同一天:
ZoneId zoneId = ZoneId.of("UTC-5h");
OffsetDateTime ad = OffsetDateTime.ofInstant(a, zoneId);
OffsetDateTime bd = OffsetDateTime.ofInstant(b, zoneId);
return ad.getDayOfYear() != bd.getDayOfYear();