メモの日々


2013年11月11日(月) [長年日記]

[python][java] JythonをScriptEngine経由で使うとdatetimeモジュールが正しく動かない

Javaのスプリクティング機能Jython 2.5.3を使ってJavaから次のPythonスクリプト

import datetime

d = datetime.date.today()
print d
print d.year
print d.min

を実行すると、

2013-11-11
113
AttributeError: 'java.sql.Date' object has no attribute 'min' in <script> at line number 6

と出力される(Java側のコードは省略)。'java.sql.Date' だと?!

試しにスプリクティング機能を使わず、

% java -jar jython-standalone-2.5.3.jar script.py

のようにスクリプトを実行すると、

2013-11-11
2013
0001-01-01

と正しく動作した。

検索すると、

というJythonのissueが見つかった。2年以上前に報告されているけれど未だに直らないみたい。

このissueにあるように「del datetime.date.__tojava__」という行をPythonスクリプトに追加してからJavaのスクリプティング機能を使って実行すると、

datetime.date(2013, 11, 11)
2013
datetime.date(1, 1, 1)

と出力されるようになった。