Date 为什么clojure中的解析日期会将结果向后移动2小时
Clojure代码Date 为什么clojure中的解析日期会将结果向后移动2小时,date,clojure,formatter,Date,Clojure,Formatter,Clojure代码 (def fmt (java.text.SimpleDateFormat. "yyyy-MM-dd")) #'user/fmt user=> (.parse fmt "2015-07-10") #inst "2015-07-09T22:00:00.000-00:00" 类似的Java代码: public class DateFmt { public static void main(String[] args) throws ParseException {
(def fmt (java.text.SimpleDateFormat. "yyyy-MM-dd"))
#'user/fmt
user=> (.parse fmt "2015-07-10")
#inst "2015-07-09T22:00:00.000-00:00"
类似的Java代码:
public class DateFmt {
public static void main(String[] args) throws ParseException {
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
final Date date = sdf.parse("2015-07-10");
System.out.println(date);
}
}
虽然Java代码打印:2015年7月10日星期五00:00:00 CEST(这是我所期望的),但Clojure倒班2小时?Clojure和Java的
日期
之间存在差异,最大的区别在于时间偏移是可选的
与RFC3339不同:
- 我们只解析时间戳格式
- 时间戳可以省略后续组件
- 时间偏移是可选的(默认为+00:00)
SimpleDataFormat
实例将时间读入UTC
(def fmt
(let [format (java.text.SimpleDateFormat. "yyyy-MM-dd")]
(.setTimeZone format (java.util.TimeZone/getTimeZone "UTC"))
format))
Clojure和Java的
Date
之间存在差异,最大的区别在于时间偏移是可选的
与RFC3339不同:
- 我们只解析时间戳格式
- 时间戳可以省略后续组件
- 时间偏移是可选的(默认为+00:00)
SimpleDataFormat
实例将时间读入UTC
(def fmt
(let [format (java.text.SimpleDateFormat. "yyyy-MM-dd")]
(.setTimeZone format (java.util.TimeZone/getTimeZone "UTC"))
format))
因此,如果您执行(.format fmt d)
,它将打印“2015-07-10”。总之,SimpleDataFormat使用用户当前时区解析字符串日期,除非配置不同,但当日期转换为Clojure instant时,它将转换为UTC时区。但是,如果使用与上述示例相同的格式化程序执行格式化
,您仍然会返回相同的字符串。因此,如果执行(.format fmt d)
,它将打印“2015-07-10”。总之,SimpleDataFormat使用用户当前时区解析字符串日期,除非配置不同,但当日期转换为Clojure instant时,它将转换为UTC时区。但是,如果使用与上面示例中相同的格式化程序执行格式化
,仍然会返回相同的字符串。