如何修改java日期为具体时间?

How to modify java Date to a specific time?

我正在 运行Jenkins 编写脚本。一份剧本需要 运行 在 07:00:00 东部时间。

作业已安排在特定的日期和时间。工作从早上 6 点开始,但需要等到早上 7 点才能运行 下一步

使用 java,我可以使用以下方法获得电流 time/date:

Date currentDate = new Date()

我想我需要将 currentDate 与今天早上 7 点的日期进行比较,这样我就可以知道到早上 7 点还有多少秒,然后让我的构建在那个时间休眠。

我的问题是,如何生成今天早上 7 点的日期?

好问题。首先创建一个 Calendar 对象来设置时间、日期和其他自定义输入,然后使用 .getTime() 成员函数将其转换为 Date 对象会更容易。 例如:要获取今天早上 7 点的日期对象(10/25/2021),请执行以下操作:

Calendar cal = Calendar.getInstance(); // Calendar constructor
cal.set(Calendar.YEAR, 2021);
cal.set(Calendar.MONTH, 10);
cal.set(Calendar.DAY_OF_MONTH, 25);
cal.set(Calendar.HOUR_OF_DAY,7);
cal.set(Calendar.MINUTE,00);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);

Date d = cal.getTime(); // convert to Date obj

有关 Calendar obj 的更多信息,请查看 Oracle (https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html)

的一些文档

避免使用可怕的 Date class。遗留日期时间 classes 多年前被 JSR 310 中定义的现代 java.time classes 取代。

捕捉您所在时区的当前时刻。

ZoneId z = ZoneId.of( "America/New_York" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

定义你的目标。

LocalTime targetTime = LocalTime.of( 7 , 0 ) ;

适应那个时间。

ZonedDateTime zdtTarget = zdt.with( targetTime ) ;

如果那一刻已经过去,请移至第二天。

if( ! zdt.isBefore( zdtTarget ) ) {
    zdtTarget = zdt.toLocalDate().plusDays( 1 ).atStartOfDay( z ).with( targetTime ) ;
}

确定要经过的时间。

Duration d = Duration.between( zdt.toInstant() , zdtTarget.toInstant() ) ;

根据需要询问持续时间对象。例如,毫秒:

long millis = d.toMillis() ;
Thread.sleep( millis ) ;

如果您必须使用java.until.Date 代码尚未更新为java.time,您可以转换。

java.until.Date date = Date.from( zdtTarget.toInstant() ) ;