在 Clojure 中,如何输出这样的日期 'Tue, 15-Jan-2013 21:47:38 GMT'?

In Clojure , how do you output a date like this 'Tue, 15-Jan-2013 21:47:38 GMT'?

此日期格式用于 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) )))

这就是我得到的:"Thu, 23-Apr-2015 16:20:22 +00:00"

如何初始化格式化程序,以便它输出像 "Thu, 23-Apr-2015 16:20:22 GMT"

这样的日期字符串

此问题的 java 版本位于 java date format - GMT 0700 (PDT)

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

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

"Thu, 23-Apr-2015 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))

"Thu, 23-Apr-2015 13:12:58 GMT-06:00"

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

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

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

您可以像 G_A 建议的那样在格式字符串中包含 GMT,但我还没有尝试过。

我确实认为使用 f/formatter rather than f/formatter-local 很重要,这样您的本地时间戳在转换为字符串之前会先转换为 UTC。