【问题标题】:How can I convert a Matillion Job variable of type DateTime to a python datetime.datetime?如何将 DateTime 类型的 Matillion Job 变量转换为 python datetime.datetime?
【发布时间】:2020-05-13 17:41:56
【问题描述】:

我有一个 DateTime 类型的 Job 变量 last_updated。我正在尝试从 Python Script 组件中使用它,我认为它会在 python 中显示为 datetime.datetime 对象,但事实并非如此:

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 对象?

【问题讨论】:

    标签: matillion


    【解决方案1】:

    这取决于你使用的python解释器:

    Jython:

    如果您使用 Jython,则 DateTime 类型的 Job 变量是 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()),因为由于某种原因,Jython 中的 dateutil.parser.parse() 没有将 Z 解析为时区 UTC(它在常规 python 2.7.12 中执行)

    Python 2 / Python 3:

    该变量将具有正确的类型datetime.datetime。没有时区

    print(repr(latest_updated)) # datetime.datetime(2000, 1, 1, 0, 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2021-11-06
      • 2020-07-31
      • 2020-07-17
      相关资源
      最近更新 更多