【问题标题】:How to add days to current date in clojure如何在clojure中将天数添加到当前日期
【发布时间】:2014-11-24 22:48:52
【问题描述】:

在 clojure 中,我想在当前日期添加天数,谁能指导我。获取当前日期如下,现在假设我想增加 7 天,如何获得新日期?

(.format (java.text.SimpleDateFormat. "MM/dd/yyyy") (java.util.Date.))

【问题讨论】:

    标签: clojure functional-programming


    【解决方案1】:

    这可行:

    (java.util.Date. (+ (* 7 86400 1000) (.getTime (java.util.Date.)))
    

    目前我更喜欢使用System/currentTimeMillis

    (java.util.Date. (+ (* 7 86400 1000) (System/currentTimeMillis)))

    或者你可以使用clj-time,这是一个更好的处理时间的api(它是Joda Time的包装器)。来自自述文件:

    (t/plus (t/date-time 1986 10 14) (t/months 1) (t/weeks 3))

    => #<DateTime 1986-12-05T00:00:00.000Z>

    【讨论】:

    • 这是错误的!你永远不应该假设一天总是有 86400 秒。如果您越过 DST 的边界,您将获得额外的一个小时或失去一个额外的小时。
    • Ex: (.format (java.text.SimpleDateFormat."yyyy/MM/dd HH:mm z") (java.util.Date. (+ (* 7 86400 1000) (.getTime (.parse (java.text.SimpleDateFormat."yyyy/MM/dd HH:mm z") "2015/03/05 00:00 PDT"))))) 产生 "2015/03/11 23:00 GMT- 08:00”,而不是“2015/03/12 00:00 GMT -0:8:00”。
    【解决方案2】:
    user> (import '[java.util Calendar])
    ;=> java.util.Calendar
    user> (defn days-later [n]
            (let [today (Calendar/getInstance)]
              (doto today
                (.add Calendar/DATE n)
                .toString)))
    #'user/days-later
    user> (println "Tomorrow: " (days-later 1))
    ;=> Tomorrow:  #inst "2014-11-26T15:36:31.901+09:00"
    ;=> nil
    user> (println "7 Days from now: " (days-later 7))
    ;=> 7 Days from now:  #inst "2014-12-02T15:36:44.785+09:00"
    ;=> nil
    

    【讨论】:

      猜你喜欢
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多