Как я могу преобразовать переменную Matillion Job типа DateTime в python datetime.datetime? - PullRequest
2 голосов
/ 28 января 2020

У меня есть переменная задания last_updated типа DateTime. Я пытаюсь использовать его из Python Script компонента, я думал, что он будет отображаться как datetime.datetime объект в python, но это не так:

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

Из того, что я вижу, кажется, быть мостом python для некоторого объекта Java типа MatillionDate.

Как я могу преобразовать это в обычный объект datetime.datetime?

1 Ответ

1 голос
/ 28 января 2020

Это зависит от того, какой интерпретатор python вы используете:

Jython:

Если вы используете Jython, то переменная Job типа DateTime, как уже упоминалось, является экземплярами MatillionDate а не 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 должна была быть в UT C, вам нужно будет сделать .replace(tzinfo=tzutc()), так как по какой-то причине dateutil.parser.parse() в Jython не анализирует Z как часовой пояс UT C (это происходит в обычном python 2.7.12)

Python 2 / Python 3:

Переменная будет иметь правильный тип уже datetime.datetime. Нет часового пояса

print(repr(latest_updated)) # datetime.datetime(2000, 1, 1, 0, 0)
...