Clojure clj时间-如何从不同时区的当前时间获取本地日期
我坐在美国/圣保罗(或其他一些随机时区),现在我想得到欧洲/伦敦当前日期的本地日期 我怎样才能做到这一点 (我知道一个本地日期在伦敦,我想用clj time.core/after检查它是否在当前日期之前?注意: clj时间Clojure clj时间-如何从不同时区的当前时间获取本地日期,clojure,timezone,clj-time,Clojure,Timezone,Clj Time,我坐在美国/圣保罗(或其他一些随机时区),现在我想得到欧洲/伦敦当前日期的本地日期 我怎样才能做到这一点 (我知道一个本地日期在伦敦,我想用clj time.core/after检查它是否在当前日期之前?注意: clj时间库基于旧的Joda时间库。为了支持java.time(从JDK 8开始提供),这两种方法都被弃用了。最好将Java互操作与Java.time一起使用,而不要使用旧的clj-time库。 包java.time基本上是JodaTime2.0,但被重写为更干净,并纠正了一些极端情况。
库基于旧的Joda时间库。为了支持java.time
(从JDK 8开始提供),这两种方法都被弃用了。最好将Java互操作与Java.time一起使用,而不要使用旧的clj-time
库。
包java.time
基本上是JodaTime2.0,但被重写为更干净,并纠正了一些极端情况。两者都是由同一个人创建的
答复: 在Java中,
LocalDate
没有时区。这就是重点
用于生日之类的事情,比如1999年12月31日,我们不认为你的生日有时区。
出于同样的原因,LocalDate
没有任何时间与之关联,就像你的生日被认为是一整天一样
有关更多信息,请参阅java.time
文档:
从JavaDocs: 日期和时间 Instant本质上是一个数字时间戳。这个 可以从时钟中检索当前瞬间。这对我们来说很有用 记录和持久化一个时间点,并在过去 与存储System.currentTimeMillis()的结果相关联 LocalDate存储没有时间的日期。这存储了一个日期,如 “2010-12-03”,可用于储存生日 LocalTime存储没有日期的时间。这储存了一段时间 “11:30”,可用于存储打开或关闭时间 LocalDateTime存储日期和时间。这将存储一个日期时间,如 “2010-12-03T11:30” ZoneDateTime存储带有时区的日期和时间。这是有用的 如果您想准确计算日期和时间 考虑到区域划分,例如“欧洲/巴黎”。如果可能的话,就是这样 建议使用不带时区的简单类。广泛的 时区的使用往往会给一个系统增加相当大的复杂性 应用程序
辅助功能: 我添加了
java.time
,以帮助您使用它。注意:
clj时间库基于旧的Joda时间库。为了支持java.time
(从JDK 8开始提供),这两种方法都被弃用了。最好将Java互操作与Java.time一起使用,而不要使用旧的clj-time
库。
包java.time
基本上是JodaTime2.0,但被重写为更干净,并纠正了一些极端情况。两者都是由同一个人创建的
答复: 在Java中,
LocalDate
没有时区。这就是重点
用于生日之类的事情,比如1999年12月31日,我们不认为你的生日有时区。
出于同样的原因,LocalDate
没有任何时间与之关联,就像你的生日被认为是一整天一样
有关更多信息,请参阅java.time
文档:
从JavaDocs: 日期和时间 Instant本质上是一个数字时间戳。这个 可以从时钟中检索当前瞬间。这对我们来说很有用 记录和持久化一个时间点,并在过去 与存储System.currentTimeMillis()的结果相关联 LocalDate存储没有时间的日期。这存储了一个日期,如 “2010-12-03”,可用于储存生日 LocalTime存储没有日期的时间。这储存了一段时间 “11:30”,可用于存储打开或关闭时间 LocalDateTime存储日期和时间。这将存储一个日期时间,如 “2010-12-03T11:30” ZoneDateTime存储带有时区的日期和时间。这是有用的 如果您想准确计算日期和时间 考虑到区域划分,例如“欧洲/巴黎”。如果可能的话,就是这样 建议使用不带时区的简单类。广泛的 时区的使用往往会给一个系统增加相当大的复杂性 应用程序
辅助功能:
我添加了
java.time
的用法,您可能会发现它很有用。似乎没有一个函数可以从中获取LocalDate
一个DateTime
或类似的clj-time
——但是Joda-time
.toLocalDate
。例如,你可以这样做:
(defn date-at-zone
[instant zone-id]
(.toLocalDate
(t/to-time-zone
instant
(t/time-zone-for-id zone-id))))
(let [instant (t/date-time 2020 12 12 1)
london-date (date-at-zone instant "Europe/London")
sao-paulo-date (date-at-zone instant "America/Sao_Paulo")]
(print (map str [instant london-date sao-paulo-date (t/after? london-date sao-paulo-date)])))
; → (2020-12-12T01:00:00.000Z 2020-12-12 2020-12-11 true)
(例如,在2020-12-12T01:00祖鲁,圣保罗和巴黎仍然是2020-12-11。)
因此,仅从世界范围来看,伦敦“严格地说是在圣保罗之后”
日期——或者已经是“明天”了(在伦敦)似乎没有一个函数可以从中获取
LocalDate
一个DateTime
或类似的clj-time
——但是Joda-time
.toLocalDate
。例如,你可以这样做:
(defn date-at-zone
[instant zone-id]
(.toLocalDate
(t/to-time-zone
instant
(t/time-zone-for-id zone-id))))
(let [instant (t/date-time 2020 12 12 1)
london-date (date-at-zone instant "Europe/London")
sao-paulo-date (date-at-zone instant "America/Sao_Paulo")]
(print (map str [instant london-date sao-paulo-date (t/after? london-date sao-paulo-date)])))
; → (2020-12-12T01:00:00.000Z 2020-12-12 2020-12-11 true)
(例如,在2020-12-12T01:00祖鲁,圣保罗和巴黎仍然是2020-12-11。)
因此,仅从世界范围来看,伦敦“严格地说是在圣保罗之后”
日期——或者已经是“明天”了(在伦敦)我不知道。所以我将使用Java语法,您可以对其进行翻译
我坐在美国/圣保罗(或其他一些随机时区)
无关紧要。无论你的屁股是在东京、雷克雅未克还是圣保罗,这与询问欧洲/伦敦时区的当前日期无关
现在我想为欧洲/伦敦的当前日期获取一个LocalDate
通过感兴趣的时区时呼叫
ZoneId zoneId = ZoneId.of( "Europe/London" ) ;
LocalDate currentDateInLondon = LocalDate.now( zoneId ) ;
我知道一个本地日期在伦敦,我想检查它是否在当前日期之前
<