Python中日期不一致,Mule



简而言之:我如何从需要在普通Python解释器中运行的Python代码中获得可靠的日期,并在Mule中运行(特别是MuleSoft Anypoint Studio,它应该将其解释为Jython)?

详细模式:作为Mule ESB项目的一部分,我正在运行一些Python脚本来生成数据文件。这些生成的文件存储在本地磁盘上,然后由Mule流从那里提取,该流将其内容推送到数据库连接(如果这看起来很迂回,那么还有其他源也可能将这些类型的文件存储到同一文件系统位置,我也会将内容推送到该数据库)。

以下是摘录:

from datetime import datetime as dt
...
this_date = dt.today()
if (this_date.year<1900): this_date.year += 1900 # Mule has a weird offset...?
...
print(str(date.year))
...

现在,有了这个评论,你可以看到我已经遇到了麻烦。当我用Python运行代码时,我得到2015年;但当我通过Mule运行相同的代码时(我认为它使用的是Jython解释器),年份变为115,所以我加了1900。

这在一个月前(经过许多天)运行良好。今天我发现(在运行Mule时)脚本中的"Today()"方法返回的不是"2015-11-12",而是"2015-10-05"。明天,我将看看这个日期是如何变化的。

现在我很困惑如何从中获得可靠的日期——理想情况下,它应该在PythonJython中都有效,但如果必须选择,Jython是关键。

更新:没有。当从我的文本编辑器中以Python的形式运行时,新代码可以工作,但当由Mule解释时,我得到:

javax.script.ScriptException:
AttributeError: 'java.sql.Timestamp' object has no attribute 'replace'
in <script> at line number 15

第15行当然是J.F.Sebastian建议修改的那一行伙计,这个翻译让我很恼火,我永远不知道什么会被误解。:(

代码(this_date.year += 1900)在Python中失败(在Jython和CPython实现中都失败——我不知道什么是Mule)。datetime.datetime()在Python中是不可变的。

使用this_date = this_date.replace(year=this_date.year + 1900)而不是this_date.year += 1900。尽管您不应该需要它:Jython和CPython都在我的系统上生成了2015。在这种情况下,Jython/CPyson之间没有区别:

from datetime import date, datetime
print date.today()
print datetime.now()

最新更新