這是我想做的事:與當前時間相比,檢查java.util.Date是否早於30天的最佳方法?
Date currentDate = new Date();
Date eventStartDate = event.getStartDate();
如何檢查是否eventStartDate比的currentdate年長超過30天?
我使用Java 8,日曆不是首選。
時區是ZoneId.systemDefault()。
這是我想做的事:與當前時間相比,檢查java.util.Date是否早於30天的最佳方法?
Date currentDate = new Date();
Date eventStartDate = event.getStartDate();
如何檢查是否eventStartDate比的currentdate年長超過30天?
我使用Java 8,日曆不是首選。
時區是ZoneId.systemDefault()。
好吧,假設你真的希望它是「提前30天」中的默認時區,我會使用類似:
// Implicitly uses system time zone and system clock
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime thirtyDaysAgo = now.plusDays(-30);
if (eventStartDate.toInstant().isBefore(thirtyDaysAgo.toInstant())) {
...
}
如果「三十日前」是圍繞一個DST改變,你需要檢查爲plusDays
文件給你的行爲,你想:
當轉換回ZonedDateTime,如果本地日期與時間的重疊,則偏移將如有可能保留,否則前面的偏移將會被使用。如果在差距中,本地日期時間將按差距的長度向前調整。
或者你能減30「24小時時刻」天,這肯定會更簡單,但在DST的變化方面可能會出現意想不到的結果。
是的,30天由於某種原因是必要的,謝謝你,Skeet先生。 – 2015-03-25 11:10:07
你可以試試這個:
Date currentDate = new Date();
Date eventStartDate = event.getStartDate();
long day30 = 30l * 24 * 60 * 60 * 1000;
boolean olderThan30 = currentDate.before(new Date((eventStartDate .getTime() + day30)));
這是disguisting,但它應該做的工作!
假設每天都是24小時。這可能會或可能不符合要求 - 他們目前還不清楚:( – 2015-03-25 11:02:17
我也讀過你的其他評論,並且我意識到你的意思是24小時之內。你是對的,目前還不清楚他目前是什麼意思date-30,但有方法可以截斷日期,所以解決這個問題並不是不可能的。 – gaRos 2015-03-25 11:13:44
記得在第一個數字(「30l」)後面加上「l」,讓編譯器知道這些操作是在長數字上完成的 - 否則你會超出整數的範圍,結果將是完全錯誤的 – 2015-12-04 12:36:33
當天的哪一部分?哪個時區?什麼是3月30日之前或1月30日之後的「一個月」? (目前還不清楚你的意思是「從當天起一個月」。)你是否在使用Java 8,如果不是,你可以使用喬達時間嗎? (這可以使用java.util.Calendar完成,但如果可能的話,我會避免這樣做。) – 2015-03-25 10:23:19
當前日期和新日期()中的日期。 30天。我確實使用Java8。我不想使用日曆。 – 2015-03-25 10:30:40
「當前日期與新日期()」 - 不指定一天。它指定了一個時間點。例如,3月25日在倫敦的時間點可能是3月24日在舊金山。所以我們需要知道使用哪個時區。而「30天」與一個月不一樣......如果你真的*意味着* 30天,請編輯你的問題說出來。 – 2015-03-25 10:33:35