java.text.SimpleDateFormat#parse has different behaviour between Scala and Clojure -
i'm trying assign pdt
string java.util.date
using simpledateformat
.
scala, gives me right format pdt
(utc-07:00
), or without setting timezone os timezone "america/los_angeles"
.
scala> import java.util.timezone import java.util.timezone scala> import java.util.date import java.util.date scala> import java.text.simpledateformat import java.text.simpledateformat scala> timezone.getdefault res0: java.util.timezone = sun.util.calendar.zoneinfo[id="america/los_angeles",offset=-28800000,dstsavings=3600000,usedaylight=true,transitions=185,lastrule=java.util.simpletimezone[id=america/los_angeles,offset=-28800000,dstsavings=3600000,usedaylight=true,startyear=0,startmode=3,startmonth=2,startday=8,startdayofweek=1,starttime=7200000,starttimemode=0,endmode=3,endmonth=10,endday=1,enddayofweek=1,endtime=7200000,endtimemode=0]] scala> val df = new simpledateformat("yyyy-mm-dd't'hh:mm:ssxxx") df: java.text.simpledateformat = java.text.simpledateformat@fe8c5ede scala> df.parse("2017-10-28t23:59:59-07:00") res1: java.util.date = sat oct 28 23:59:59 pdt 2017
but clojure parses date in utc format (:utc-00:00
),
without .settimezone
,
aws-creds.core=> (import 'java.util.timezone) java.util.timezone aws-creds.core=> (timezone/getdefault) #object[sun.util.calendar.zoneinfo 0x28ce2a1 "sun.util.calendar.zoneinfo[id=\"america/los_angeles\",offset=-28800000,dstsavings=3600000,usedaylight=true,transitions=185,lastrule=java.util.simpletimezone[id=america/los_angeles,offset=-28800000,dstsavings=3600000,usedaylight=true,startyear=0,startmode=3,startmonth=2,startday=8,startdayofweek=1,starttime=7200000,starttimemode=0,endmode=3,endmonth=10,endday=1,enddayofweek=1,endtime=7200000,endtimemode=0]]"] aws-creds.core=> (import 'java.util.date) java.util.date aws-creds.core=> (import 'java.text.simpledateformat) java.text.simpledateformat aws-creds.core=> (let [df (new simpledateformat "yyyy-mm-dd't'hh:mm:ssxxx" )] #_=> (print (.parse df "2017-10-28t23:59:59-07:00"))) #inst "2017-10-29t06:59:59.000-00:00"nil
same behaviour .settimezone
america/los_angeles
,
aws-creds.core=> (let [df (new simpledateformat "yyyy-mm-dd't'hh:mm:ssxxx" )] #_=> (.settimezone df (timezone/gettimezone "america/los_angeles")) #_=> (print (.parse df "2017-10-28t23:59:59-07:00"))) #inst "2017-10-29t06:59:59.000-00:00"nil
which strange, since in both cases i'm using java.text.simpledateformat
. curious why simpledateformat#parse
scala stores date in pdt
format while clojure in utc
format?
looks clojure repl prints dates in utc.
if call tostring()
on date, prints date scala repl (which believe implicitly calls tostring when printing objects) does, , in system time zone:
user=> (let [df (new simpledateformat "yyyy-mm-dd't'hh:mm:ssxxx" )] #_=> (print (.tostring (.parse df "2017-10-28t23:59:59-07:00")))) sat oct 28 23:59:59 pdt 2017nil
Comments
Post a Comment