Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 为什么clojure中的解析日期会将结果向后移动2小时_Date_Clojure_Formatter - Fatal编程技术网

Date 为什么clojure中的解析日期会将结果向后移动2小时

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 {

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 {
        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)
因此,Clojure的时间总是与UTC相关联,而Java则与本地时区相关联

时间实际上是相等的,因为你是

如果希望Clojure输出与Java匹配,则必须指示
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)
因此,Clojure的时间总是与UTC相关联,而Java则与本地时区相关联

时间实际上是相等的,因为你是

如果希望Clojure输出与Java匹配,则必须指示
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时区。但是,如果使用与上面示例中相同的格式化程序执行
格式化
,仍然会返回相同的字符串。