這個問題在這里已經有了答案: 在 Java 中使用時區獲取特定日期 1 個回答 如何根據小時和分鐘獲取日期時間 4 個回答 9 小時前關閉。
我正在 Jenkins 中運行一個腳本。一段腳本需要在東部時間 07:00:00 運行。
該作業已安排在特定日期和時間。作業早上6點開始,但需要等到早上7點才能運行下一步
使用 java,我可以使用以下方法獲取當前時間/日期:
Date currentDate = new Date()
我想我需要將 currentDate 與今天早上 7 點的日期進行比較,這樣我就可以知道到早上 7 點還有多少秒,然后讓我的構建在那段時間進入睡眠狀態。
我的問題是,如何在早上 7 點生成今天的日期?
uj5u.com熱心網友回復:
避免使用可怕的Date類。舊的日期時間類在多年前被JSR 310 中定義的現代java.time類所取代。
捕捉在您的特定時區看到的當前時刻。
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的for 代碼,則可以進行轉換。
java.until.Date date = Date.from( zdtTarget.toInstant() ) ;
uj5u.com熱心網友回復:
很好的問題。首先創建 Calendar 物件來設定時間、日期和其他自定義輸入,然后使用 <CALENDAR_OBJECT>.getTime() 成員函式將其轉換為 Date 物件會更容易。例如:要獲得今天上午 7 點(10/25/2021)的 Date 物件,請執行以下操作:
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
有關日歷物件的更多資訊,請查看 Oracle 的一些檔案(https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336370.html
