Как я могу преобразовать переменную Matillion Job типа DateTime в python datetime.datetime?

У меня есть переменная Job 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 ответ

Это зависит от того, какой интерпретатор 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 должна быть в UTC, вам нужно будет сделать .replace(tzinfo=tzutc()) как по какой-то причине dateutil.parser.parse() в Jython не анализирует Z как часовой пояс UTC (в обычном Python 2.7.12)

Python 2 / Python 3:

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

print(repr(latest_updated)) # datetime.datetime(2000, 1, 1, 0, 0)
Другие вопросы по тегам