我尝试将Python ( DateTime )组件的jython值传递给Python (Python3)组件,但似乎不起作用

存在一个类型为DateTime、默认值为2028-01-28 12:00:00的Matillion作业变量myvar
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执行结束时,Jython的类型(str)错误
('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实例的变量。我想我必须将datetime转换回com.matillion.bi.emerald.server.scripting.MatillionDate,因为这似乎是Jython中的myvar类型。
问题是如何将datetime转换为MatillionDate
发布于 2020-03-04 02:56:49
我认为您看到的是字符串值,因为您正在使用变量的repr()函数。
我采用了您的示例,并添加了一些额外的行来说明我的意思。
from datetime import datetime
print('myvar', type(myvar))
context.updateVariable('myvar', datetime.now())
print('myvar', myvar)
print('myvar', type(myvar))您可以看到'type‘实际上是一个Java时间戳,这是有意义的,因为Jython在JVM中执行。您可以使用Python日期时间更新变量,这也很容易,因为得到的类型也是Java时间戳。
不过,为了回答您的问题,如果您将Matillion变量设置为str(myvar2)的值,您应该能够在之后访问Python3组件中相同/更新的值(作为datetime.datetime对象),而不需要创建另一个MatillionDate值。在使用Python3中的值时,这只需要进行另一种类型转换。
https://stackoverflow.com/questions/59950115
复制相似问题