如何从java二进制文件外部操作java.util.Date date()?

时间:2016-03-30 01:02:02

标签: java date testing

我有一个使用date()获取当前日期的java应用程序,并且我试图操纵从date()获取的日期以进行测试。

我已尝试将系统日期(在Windows上)设置为过去的日期(例如2014年1月1日),但java应用程序似乎始终从系统日期以外的某个位置获取实时日期。

是否可以操作日期,如果可以,我如何操作date()函数从二进制文件外返回的日期?

2 个答案:

答案 0 :(得分:2)

无需从Java外部进行操作。您在Java中的测试可以将报告的值更改为当前时刻。

java.time

您正在使用旧的过时类。这些类已被Java 8及更高版本中内置的java.time框架所取代。

您可以覆盖抽象Clock类来提供自己的实现。您的课程可以根据您的测试需要更改其报告的日期时间。

Clock类提供了一些静态方法,例如fixedoffsettick,以方便地提供更改的实现。

答案 1 :(得分:1)

Date中的Java类使用通过System.currentTimeMillis()报告的系统时间。这在Windows中调用低分辨率Win32/64 API调用GetSystemTimeAsFileTime(),它始终按照Microsoft documentation返回“UTC格式的当前系统日期和时间”。< / p>

如果有权访问代码并且要求生成一个自定义Date对象,表示除当前之外的一些任意时间,建议的方法是通过Calendar类。

例如:

Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, 2014);
calendar.set(Calendar.MONTH, 0); // 0 = January, 11 = December
calendar.set(Calendar.DAY_OF_MONTH, 1); // 1 to 31

鉴于上述情况,可以按如下方式检索新的Date对象:

Date date = calendar.getTime();