简而言之:如何从需要在普通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。
这个工作在一个月前很好(经过很多天)。今天我发现(当通过骡子跑时)&#34;今天()&#34;脚本中的方法不返回&#34; 2015-11-12&#34;而是&#34; 2015-10-05&#34;。明天,我会看到这个日期是如何变化的。
现在我很难知道如何从中获得可靠的日期 - 理想情况下它应该在两者 Python 和 Jython中工作,但是如果我必须选择,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的建议改变。 男人,这个翻译让我烦恼,我永远不知道什么会被误解。 :(
答案 0 :(得分:1)
代码(//myclass.h
class myClass//: private std::vector<char>
{
private:
typedef char mytype;
typedef std::vector<mytype> vector;
vector Store;
...
/* iterators */
const vector::const_iterator begin() const
{
return Store.begin() ;
}
const vector::const_iterator end() const
{
return Store.end();
}
vector::iterator begin()
{
return Store.begin() ;
}
vector::iterator end()
{
return Store.end();
}
template<class Iter>
void insert(vector::const_iterator c, Iter a, Iter b)
{
Store.insert(c,a,b); //error
}
)在Python中失败(在Jython和CPython实现上都有 - 我不知道什么是Mule)。 this_date.year += 1900
在Python中是不可变的。
使用datetime.datetime()
代替this_date = this_date.replace(year=this_date.year + 1900)
。虽然你不应该需要它:再次,Jython和CPython都在我的系统上生成2015。在这种情况下,Jython / CPython没有区别:
this_date.year += 1900