【问题标题】:Java: Elegant solution to get a special Date as a long?Java:获得特殊日期的优雅解决方案?
【发布时间】:2016-11-17 06:28:39
【问题描述】:

编辑:

假设我想要 Unix 时间戳的日期为 11.11.2016。

目前我只是使用

 final int start = (int) ((System.currentTimeMillis() - 24 * 60 * 60 * 1000 * 5) / 1000L);

2016 年 11 月 10 日是

     final int start = (int) ((System.currentTimeMillis() - 24 * 60 * 60 * 1000 * 6) / 1000L);

但它看起来很基本:)

是否有更好的解决方案?我在 Date 和 LocalTime 中找不到任何函数。

谢谢!

【问题讨论】:

  • “并减去天数”?你到底想做什么? This? Or this?
  • 这里有一个基本的类型不匹配:10.05.2016是一天的周期;一个unix时间戳大致是一个瞬间(实际上,它是一个秒长的时间段)。您不能在不指定 1) 时区的情况下将 10.05.2016 转换为 unix 时间戳; 2) 一天中的某个时间。
  • @PowerFlower 请编辑您的问题和标题以澄清。几乎可以肯定这是重复的,因为我们有数千个关于在 Java 中处理日期时间的现有问题和答案。请在发布前搜索,如果重复,请关闭/删除您的问题。
  • 日历日期不是 unix 时间戳。两个完全不同的概念!虽然您可以将 Instant 转换为自 Unix 纪元以来经过的秒数的 long 值,但您可以使用其方法 toEpochDayLocalDate 转换为 long

标签: java time


【解决方案1】:

如果您指定一天中的某个时间您想要纪元秒的时区,那么将“日期”转换为纪元秒才有意义。

否则,转换是不确定的,因为“日期”是特定时区中的 24 小时周期(通常),而 unix 时间戳是自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数.

LocalDate.of(2016, 5, 10)

    // e.g. LocalTime.of(12, 0) or .atStartOfDay()
    // - *not* midnight, in general, since this does not always exist.
    .atTime(someLocalTime)

    // e.g. ZoneId.of("UTC")
    .atZone(someTimeZoneId)

    .toEpochSecond();

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多