0

我正在尝试将 DateTime 值从 Python (jython) 组件传递给 Python (python 3) 组件,但它似乎不起作用

Matillion Orchestraton 工作

有一个myvar具有类型DateTime和默认值的 Matillion 作业变量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))

我已经可以看到Jython 执行结束时的myvar类型 () 错误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实例的变量。我想我必须将日期时间转换回 a com.matillion.bi.emerald.server.scripting.MatillionDate,因为这似乎是myvarJython 内部的类型。

问题是如何将我的日期时间转换为MatillionDate

4

1 回答 1

0

我认为您看到的是字符串值,因为您使用的是变量的 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 日期时间来更新变量,就像结果类型也是 Java 时间戳一样容易。

不过,要回答您的问题,如果您将 Matillion 变量设置为 str(myvar2) 的值,您应该能够在之后访问 Python3 组件中的相同/更新值(作为 datetime.datetime 对象),而无需创建另一个 MatillionDate 值。当从 Python3 使用该值时,这将只需要另一个类型转换。

于 2020-03-03T18:56:49.117 回答