我有一个使用date()获取当前日期的java应用程序,并且我试图操纵从date()获取的日期以进行测试。
我已尝试将系统日期(在Windows上)设置为过去的日期(例如2014年1月1日),但java应用程序似乎始终从系统日期以外的某个位置获取实时日期。
是否可以操作日期,如果可以,我如何操作date()函数从二进制文件外返回的日期?
答案 0 :(得分:2)
无需从Java外部进行操作。您在Java中的测试可以将报告的值更改为当前时刻。
您正在使用旧的过时类。这些类已被Java 8及更高版本中内置的java.time框架所取代。
您可以覆盖抽象Clock
类来提供自己的实现。您的课程可以根据您的测试需要更改其报告的日期时间。
答案 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();