在Clojure中,你如何输出像'Tue,2013年1月15日21:47:38 GMT'这样的日期?

时间:2015-04-23 16:26:46

标签: datetime clojure jodatime

此日期格式用于HTTP Cookie Expires field

这是我目前的代码

(ns cookie-handler
  (:require[clj-time.format :as f])
  (:import (org.joda.time DateTimeZone)))

(def custom-formatter2 
  (f/formatter "EEE, dd-MMM-yyyy HH:mm:ss zzz" (DateTimeZone/forID "Etc/GMT")))

我在repl

中调用它
(f/unparse custom-formatter2 (c/to-date-time  (.. (Calendar/getInstance) (getTime) )))

这就是我得到的:“星期四,2015年4月23日16:20:22 +00:00”

如何初始化格式化程序,以便输出日期字符串,例如“Thu,2015年4月23日16:20:22 GMT”

2 个答案:

答案 0 :(得分:2)

java date format - GMT 0700 (PDT)

存在此问题的java版本

如果你想要的只是格式化日期字符串末尾的GMT,你可以将这些字符添加到格式字符串的末尾

(def custom1 (f/formatter-local "EEE, dd-MMM-yyyy HH:mm:ss 'GMT'"))
(def formatted-date-1 (f/unparse custom1 (t/now)))

"星期四,2015年4月23日19:12:58 GMT"

如果您确实需要GMT后跟偏移量,则适用相同的想法

(def custom2 (f/formatter-local "EEE, dd-MMM-yyyy HH:mm:ss 'GMT'z"))
(def today (t/to-time-zone (t/now) (t/time-zone-for-offset -6)))
(def formatted-date-2 (f/unparse custom-formatter today))

"星期四,2015年4月23日13:12:58 GMT-06:00"

答案 1 :(得分:0)

我在我的library中使用以下内容,需要输出符合HTTP规范的时间戳:

(def ^:private time-format (f/formatter "EEE, dd MMM yyyy HH:mm:ss"))

(defn- time->str
  [time]
  (str (f/unparse time-format time) " GMT"))

您可以在格式字符串中添加GMT,例如G_A建议,但我还没有尝试过。

我确实认为使用f/formatter而非f/formatter-local非常重要,因此您的本地时间戳会在转换为字符串之前转换为UTC。