【问题标题】:Java: round unix time (Long) to first day of the monthJava:将 unix 时间(长)舍入到该月的第一天
【发布时间】:2016-05-31 20:19:11
【问题描述】:

我正在尝试在 Java 中将 unix 时间舍入到每月的第一天,但​​没有成功。示例:

1314057600(2011 年 8 月 23 日星期二 00:00:00 GMT)

1312156800(格林威治标准时间 2011 年 8 月 1 日星期一 00:00:00)

我从文件中读取并将其作为 Long 存储在变量(名为“valor”的变量)中的 unix 时间。 到目前为止,我已经能够用它创建一个 Java 时间戳

LocalDateTime timestamp = LocalDateTime.ofInstant(Instant.ofEpochSecond(valor), ZoneId.systemDefault());

并为月初创建一个新的时间戳:

LocalDate key = LocalDate.of(timestamp.getYear(), timestamp.getMonthValue(), 1);

如何将这个新的时间戳记为 Long?

【问题讨论】:

  • 首先要考虑的是:您对哪个时区感兴趣?总是UTC?我假设是公历?
  • 从较早的帖子中尝试 [this] (stackoverflow.com/a/21247526/442256)
  • 在这种情况下时区并不重要,是公历。
  • @sfk 请注意,您链接的答案是关于 Joda 时间,而 OP 是在询问 Java 8 时间 API。
  • 向下滚动@sfk 链接,有一些关于 Java 8 的信息。

标签: java unix-timestamp


【解决方案1】:

这样的事情听起来会奏效:

key.atStartOfDay().atZone(ZoneId.systemDefault()).toEpochSecond()

(假设您希望它在系统的默认时区)。

【讨论】:

  • 完美!我的错误是我使用了 LocalDate 而不是 LocalDateTime。 LocalDate没有toEpochSecond,只有toEpochDay,不一样。
猜你喜欢
  • 2016-01-17
  • 2016-05-31
  • 1970-01-01
  • 2021-09-10
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
相关资源
最近更新 更多