在Java中为Saxon设置当前日期时间

在Java中为Saxon设置当前日期时间,java,unit-testing,xslt,xslt-2.0,saxon,Java,Unit Testing,Xslt,Xslt 2.0,Saxon,我有大量的XSLT转换,正在迁移到一个新系统。为了便于回归测试,我通过这些转换运行了多个示例输入,并保留了用于JUnit测试的输入/输出对 这几天效果很好,直到突然,其中一些测试失败。故障源可追溯到日期转换——有时日期以月-日对的形式给出,根据该日期与今天日期的关系假设年份。因此,如果给定的日期是10月1日,则转换会突然返回2014年10月1日,而最初预期的时间是2013年 在阅读萨克森文档时,我偶然发现: -现在:yyyy-mm-ddThh:mm:ss+hh:mm 为转换设置current-d

我有大量的XSLT转换,正在迁移到一个新系统。为了便于回归测试,我通过这些转换运行了多个示例输入,并保留了用于JUnit测试的输入/输出对

这几天效果很好,直到突然,其中一些测试失败。故障源可追溯到日期转换——有时日期以月-日对的形式给出,根据该日期与今天日期的关系假设年份。因此,如果给定的日期是
10月1日
,则转换会突然返回
2014年10月1日
,而最初预期的时间是
2013年

在阅读萨克森文档时,我偶然发现:

-现在:yyyy-mm-ddThh:mm:ss+hh:mm

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

这正是我所需要的,但不幸的是,我正在java中运行这些转换(及其附带的单元测试),而不是从命令行运行。我四处寻找某种类型的transformer方法,也许我可以设置一个属性,但到目前为止什么也没看到。我可以重写所有转换以接受当前日期参数,并以编程方式设置该参数,但不只是为了测试


tl;dr在Java中的Saxon中,是否有强制从
current-datetime()
返回特定日期的选项?

Saxon API中的相应选项是Controller.setCurrentDateTime()。控制器是Saxon对JAXP转换器的实现,因此您可以向下转换转换器,或者在s9api中,您可以从XsltTransformer对象访问它。

我使用的是XsltTransformer,因此
Transformer.getUnderlineController().setCurrentDateTime()
非常有效!