通过忽略夏令时将 LocalDate 转换为 Epoch

LocalDate to Epoch by Ignoring DayLightSaving

商业案例:

数据类型 LocalDate 的日期字段需要转换为 epoch

private LocalDate someDate;

我遇到的问题是,有时夏令时 日期被转换为 n-1

示例: 日期是 28-Feb-2037 转换为 => 27-Feb-2037 这是不正确的。

解释:当我们从 LocalDate 转换为 Epoch 并将 ZoneId 作为系统默认值时,它会考虑夏令时。由于这个原因,纪元减少了 1 小时,当 UI 再次将其转换为日期时,它变为 n-1 date 23:00:00 hrs.

我的转换代码如下所示

someDate.atStartOfDay(ZoneId.systemDefault()).toEpochSecond() * 1000); //systemDefault = EUROPE/PARIS

如何在转换时忽略夏令时?

通过忽略时区,下面的代码将为您完成这项工作

localDate.atStartOfDay().atOffset(UTC).toEpochSecond()

或者也许您需要这个:

    TimeZone timeZone = TimeZone.getTimeZone("GMT+1");// Paris timezone without daylight saving
    localDate.atStartOfDay(timeZone.toZoneId()).toEpochSecond();

想法是使用固定时区偏移来摆脱夏令时。

LocalDate needs to be converted into epoch

调用 toEpochDay() 获取自 1970 年 1 月 1 日以来 的纪元。

如果需要纪元(又名Unix time),则乘以86400

乘以86400000如果你需要纪元毫秒(常见于Java)。