Можно ли обновить переменную 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.