亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8減去日期但保留小時

Java 8減去日期但保留小時

慕娘9325324 2021-09-15 15:53:56
我想從現在減去 7 天,但要保留時間,所以如果現在是 12/09/2018 的 18:30,請在 18:30 獲取 05/09/2018...我試過了:public static Date subtractDays (int numDaysToSubstract) {        LocalDate now = LocalDate.now().minusDays(numDaysToSubstract);         return Date.from(now.atStartOfDay(ZoneId.systemDefault()).toInstant());    }但是我在 05/09/2018 的 00:00 收到了
查看完整描述

3 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

正如其他人的建議,LocalDate并且atStartOfDay應該是僅僅基于他們的名字紅旗。它們是描述時間的錯誤類型和維護時間的錯誤方法。


這也是一種毫無意義的經歷LocalDateTime來,然后將其轉換為一個Instant。Instant直接使用


public static Date subtractDays(int numDaysToSubstract) {

    return Date.from(Instant.now().minus(numDaysToSubstract, ChronoUnit.DAYS));

    // or

    // return Date.from(Instant.now().minus(Duration.ofDays(numDaysToSubstract)));


}

(我假設您正在使用java.util.Date是因為與某些舊 API 兼容。)


查看完整回答
反對 回復 2021-09-15
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

從到目前為止發布的其他答案中的代碼中不清楚他們如何處理夏令時 (DST) 和其他時間異常。他們以不同的方式這樣做。為了更清楚地表明,如果現在是 18.30,您上周想要 18.30,無論在此期間是否發生了夏季時間的過渡,我建議使用ZonedDateTime:


    System.out.println("Now:                 " + Instant.now());

    Instant aWeekAgo = ZonedDateTime.now(ZoneId.of("Europe/Madrid"))

            .minusWeeks(1)

            .toInstant();

    System.out.println("A week ago in Spain: " + aWeekAgo);

由于西班牙的夏季時間在上周還沒有結束或開始,因此運行剛才的代碼片段也給出了 UTC 中的同一時間(Instant打印的內容):


Now:                 2018-09-13T09:46:58.066957Z

A week ago in Spain: 2018-09-06T09:46:58.102680Z

我相信你會根據你的代碼調整這個想法。


查看完整回答
反對 回復 2021-09-15
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

使用類LocalDateTime代替LocalDate(不包含時間組件..)


查看完整回答
反對 回復 2021-09-15
  • 3 回答
  • 0 關注
  • 202 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號