2

我有一个 Joblast_updated类型的变量DateTime。我试图从一个Python Script组件中使用它,我认为它会在 python 中显示为datetime.datetime对象,但它不是:

print(latest_updated) # Sat Jan 01 00:00:00 UTC 2000
print(latest_updated.getClass()) # <type 'com.matillion.bi.emerald.server.scripting.MatillionDate'>

从我所看到的看来,它似乎是通向某些 Java 类型对象的 python 桥MatillionDate

如何将其转换为常规datetime.datetime对象?

4

1 回答 1

1

这取决于您使用的 python 解释器:

杰通:

如果您使用 Jython,则 DateTime 类型的 Job 变量如前所述是MatillionDateand not的实例datetime。您可以将其转换回datetime.datetime,通过将其转换为 Java Instant,获取 ISO 8601 表示并解析:

from dateutil.parser import parse
from dateutil.tz import tzutc

as_iso_string = str(latest_updated.toInstant()) # 2000-01-01T00:00:00Z
asdt = parse(as_iso_string) # datetime.datetime(2000, 1, 1, 0, 0, tzinfo=tzlocal())) tzinfo should be tzutc() not tzlocal()
asdt = parse(as_iso_string).replace(tzinfo=None) # naive datetime
asdt = parse(as_iso_string).replace(tzinfo=tzutc()) # datetime.datetime(2000, 1, 1, 0, 0, tzinfo=tzutc())

确保你得到正确的时区,如果你的 Job 变量是 UTC,你需要这样做,因为在 Jython 中.replace(tzinfo=tzutc())由于某种原因dateutil.parser.parse()没有解析Z时区 UTC(它在常规 python 2.7.12 中)

蟒蛇 2 / 蟒蛇 3:

该变量已经具有正确的类型datetime.datetime。无时区

print(repr(latest_updated)) # datetime.datetime(2000, 1, 1, 0, 0)
于 2020-01-28T10:19:10.317 回答