JimT
(jimtng)
December 22, 2019, 12:34pm
1
When I did String -> Epoch -> String -> DateTimeType, it works as expected.
def test(event):
date = "2019-12-19T00:00:00.000Z"
direct = DateTimeType(date)
test.log.info("direct: " + direct.toString())
epoch = DateTime(date).millis
fromepoch = DateTimeType(DateTime(epoch).toString())
test.log.info("indirect: " + fromepoch.toString())
The result:
direct: 2019-12-19T00:00:00.000+0000
indirect: 2019-12-19T10:00:00.000+1000
Why is it different? I would expect that the direct one would give me the local timezone i.e. the same as indirect.
To rephrase the question, how do I turn the string into a DateTimeType which will print out (toString) in my local timezone, regardless of the input string’s timezone?
5iver
(Scott Rushworth)
December 22, 2019, 9:10pm
2
Take a look at what you are passing to the constructor. This may help…
from org.joda.time import DateTime
from core.log import logging, LOG_PREFIX
LOG = logging.getLogger("{}.TEST".format(LOG_PREFIX))
test_date = "2019-12-19T00:00:00.000Z"
LOG.warn("test_date: {}".format(test_date))
LOG.warn("DateTimeType(test_date): {}, getOffset(): {}".format(DateTimeType(test_date), DateTimeType(test_date).zonedDateTime.getOffset()))
LOG.warn("")
LOG.warn("DateTime(test_date): {}".format(DateTime(test_date)))
LOG.warn("DateTimeType(DateTime(test_date).toString()): {}, getOffset(): {}".format(DateTimeType(DateTime(test_date).toString()), DateTimeType(DateTime(test_date).toString()).zonedDateTime.getOffset()))
Which logs…
2019-12-22 15:40:55.689 [WARN ] [jsr223.jython.TEST] - test_date: 2019-12-19T00:00:00.000Z
2019-12-22 15:40:55.690 [WARN ] [jsr223.jython.TEST] - DateTimeType(test_date): 2019-12-19T00:00:00.000+0000, getOffset(): Z
2019-12-22 15:40:55.690 [WARN ] [jsr223.jython.TEST] -
2019-12-22 15:40:55.690 [WARN ] [jsr223.jython.TEST] - DateTime(test_date): 2019-12-18T19:00:00.000-05:00
2019-12-22 15:40:55.691 [WARN ] [jsr223.jython.TEST] - DateTimeType(DateTime(test_date).toString()): 2019-12-18T19:00:00.000-0500, getOffset(): -05:00
You are being provided exactly what you asked for. If you need to convert a DateTimeType to another DateTimeType in another timezone, you can do something like…
from java.time import ZoneId
from core.log import logging, LOG_PREFIX
LOG = logging.getLogger("{}.TEST".format(LOG_PREFIX))
test_date = "2019-12-19T00:00:00.000Z"
direct = DateTimeType(test_date)
direct_local_zoneid_of = DateTimeType(DateTimeType(test_date).zonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York")))
LOG.warn("direct: {}, direct_local_zoneid_of: {}".format(direct, direct_local_zoneid_of))
direct_local_system_default = DateTimeType(DateTimeType(test_date).zonedDateTime.withZoneSameInstant(ZoneId.systemDefault()))
LOG.warn("direct: {}, direct_local_system_default: {}".format(direct, direct_local_system_default))
We need more documentation for using Java classes in DateTime conversions!
1 Like