如何从LocalDate和LocalDateTime中提取epoch?

2022-08-31 08:06:02

如何从 的实例中提取 epoch 值, 或 ?我已经尝试了以下内容,但它给了我其他结果:LongLocalDateTimeLocalDate

LocalDateTime time = LocalDateTime.parse("04.02.2014  19:51:01", DateTimeFormatter.ofPattern("dd.MM.yyyy  HH:mm:ss"));
System.out.println(time.getLong(ChronoField.SECOND_OF_DAY)); // gives 71461
System.out.println(time.getLong(ChronoField.EPOCH_DAY)); // gives 16105

我想要的只是本地日期时间的值。我的时区是 UTC+1,采用夏令时。1391539861"04.02.2014 19:51:01"Europe/Oslo


答案 1

类 和 不包含有关时区时间偏移量的信息,并且自纪元以来的秒数如果没有此信息,将变得模糊不清。但是,这些对象有几种方法可以通过传递实例将它们转换为具有时区的日期/时间对象。LocalDateLocalDateTimeZoneId

本地日期

LocalDate date = ...;
ZoneId zoneId = ZoneId.systemDefault(); // or: ZoneId.of("Europe/Oslo");
long epoch = date.atStartOfDay(zoneId).toEpochSecond();

本地日期时间

LocalDateTime time = ...;
ZoneId zoneId = ZoneId.systemDefault(); // or: ZoneId.of("Europe/Oslo");
long epoch = time.atZone(zoneId).toEpochSecond();

答案 2

'Millis since unix epoch' 表示一个瞬间,所以你应该使用 Instant 类:

private long toEpochMilli(LocalDateTime localDateTime)
{
  return localDateTime.atZone(ZoneId.systemDefault())
    .toInstant().toEpochMilli();
}

推荐