2013-10-23 21 views
2

我有很多XSLT转换,我正在迁移到新系统。为了便于回归测试,我已经通过这些转换运行了多个示例输入,并且保留了在JUnit测试中使用的输入/输出对。在Java中设置Saxon的当前日期时间

这工作了好几天,直到突然,其中一些测试失败。失败的根源被追踪到日期转换 - 有时日期是以月份日期对的形式给出的,并且根据该日期与今天的日期的关系来假定年份。所以,如果给定的日期是Oct. 1,转换突然返回Oct. 1, 2014,当2013最初预计。

虽然我在读撒克逊文档,我碰到这个偶然:http://saxonica.com/documentation9.4-demo/html/using-xsl/commandline.html

-now:YYYY-MM-DDTHH:MM:SS + HH:MM

设置的电流 - 值dateTime()(和隐式时区())。这是为测试而设计的,以便获得可重复的结果以与参考结果进行比较,或者测试样式表是否可以处理重要的日期和时间,如年终处理。

这是正是我所需要的,但不幸的是,我跑这些变换(及其相关的单元测试)在Java中,而不是在命令行。我环顾四周寻找某种变压器方法,可能是我可以设置的一个属性,但目前为止没有看到任何变化。 I 可能会重写所有转换以接受当前日期参数并以编程方式进行设置,但不仅仅是为了测试目的。

tl; dr是否有任何选项可以强制某个日期从位于爪哇撒克逊的current-datetime()返回?

回答

2

Saxon API中的相应选项是Controller.setCurrentDateTime()。控制器是Saxon的JAXP Transformer的实现,所以你可以下载Transformer,或者在s9api中,你可以从XsltTransformer对象中获得它。

+0

我正在使用XsltTransformer,所以'transformer.getUnderlyingController()。setCurrentDateTime()'很好! – Klazen108

相关问题