Можно ли обновить переменную DateTime задания Matillion из сценария Jython?

Я пытаюсь передать значения DateTime из компонента Python (jython) в компонент Python (python 3), но, похоже, это не работает

Есть переменная Matillion Job myvar с типом DateTime и значение по умолчанию 2028-01-28 12:00:00

Код Jython следующий:

from dateutil.parser import parse
from datetime import timedelta  

print('class', myvar.getClass())
myvar = parse(str(myvar.toInstant())).replace(tzinfo=None)
print('myvar', repr(myvar))
myvar2 = myvar + timedelta(days=1)
print('myvar2', repr(myvar2))
context.updateVariable('myvar', myvar2)
print('myvar',  repr(myvar))

Я уже вижу это myvar имеет неправильный тип (str) конец выполнения Jython

('class', <type 'com.matillion.bi.emerald.server.scripting.MatillionDate'>)
('myvar', 'datetime.datetime(2028, 1, 28, 12, 0)')
('myvar2', 'datetime.datetime(2028, 1, 29, 12, 0)')
('myvar', u'2028-01-29 12:00:00.0')

Я предполагаю, что я не могу обновить переменную, передавая datetimeпример. Думаю, мне нужно преобразовать дату и время обратно вcom.matillion.bi.emerald.server.scripting.MatillionDate так как это похоже на тип myvar внутри Jython.

Вопрос в том, как преобразовать дату и время в MatillionDate?

1 ответ

Я думаю, вы видите строковое значение, потому что вы используете функцию repr() переменной.

Я взял ваш пример и добавил несколько дополнительных строк, чтобы показать, что я имею в виду.

from datetime import datetime
print('myvar',  type(myvar))
context.updateVariable('myvar', datetime.now())
print('myvar', myvar)
print('myvar', type(myvar))

Вы можете видеть, что "тип" на самом деле является меткой времени Java, что имеет смысл, поскольку Jython выполняется в JVM. Вы можете так же легко обновить переменную с помощью Python datetime, если результирующий тип также является меткой времени Java.

Однако, чтобы ответить на ваш вопрос, если вы установите для переменной Matillion значение str(myvar2), вы сможете получить доступ к тому же / обновленному значению в компоненте Python3 впоследствии (как объект datetime.datetime) без необходимости создание другого значения MatillionDate. Для этого просто потребуется еще одно преобразование типа при использовании этого значения из Python3.

Другие вопросы по тегам