此刻我正在嘗試使我的java程序重置一些值。重置這些值的觸發器將是新一天的開始。例如,如果日期是2015年1月24日,我打開該程序來完成我的工作並關閉程序。如果我在2015年1月24日打開該程序,它將不會重置程序。但是,如果我在2015年1月25日打開該程序,它將重置MySQL數據庫中的值。基於時間重置值MySQL
所以。如何對時間/日期進行驗證以重置數據庫中的值?
此刻我正在嘗試使我的java程序重置一些值。重置這些值的觸發器將是新一天的開始。例如,如果日期是2015年1月24日,我打開該程序來完成我的工作並關閉程序。如果我在2015年1月24日打開該程序,它將不會重置程序。但是,如果我在2015年1月25日打開該程序,它將重置MySQL數據庫中的值。基於時間重置值MySQL
所以。如何對時間/日期進行驗證以重置數據庫中的值?
使用getTodayAtMidnight()方法來計算下一個有效時間可以設定值。將此值存儲在表中。然後使用'now.after(nextSetDate)'來查看它是否返回'true'。如果是這樣,您可以重置值,並存儲下一個日期。如果它返回false,你仍然是在同一日期,不應該重置值。如果您有任何問題,請告訴我。
public static void main(String[] args) {
Date nextSetDate = getTodayAtMidnight();
System.out.println(nextSetDate);
Date now = new Date();
System.out.println(now.after(nextSetDate));
}
public static Date getTodayAtMidnight() {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
c.add(Calendar.DAY_OF_YEAR, 1);
return c.getTime();
}
此代碼忽略了時區的關鍵問題。 JVM的當前默認時區已應用,但該默認值可能會有所不同 - 即使在運行時(!)也是如此。 –
解決此問題的正確方法是什麼? –
正確的做法是**始終指定時區**,而不是隱式依賴JVM的當前默認時區。 –
避免。使用Java 8及更高版本中內置的java.time框架。
在java.time,使用LocalDate
類的日期,唯一的價值,當你不需要時間的日或時區。雖然時區未存儲在LocalDate
筆記中,但您必須指定一個時區來確定「今天」。世界各地的日子並不是一回事,因爲東部的一個新的日子已經到來。因此請指定您想要的/預期的時區。如果省略,則隱式應用JVM的當前默認時區。該默認值可以隨時更改,即使在運行時(!),也可以更明確地指定時區。
ZoneId zoneId = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(zoneId);
在MySQL中,利用其DATE
類型存儲日期,唯一的價值。使用java.sql.Date
來檢索/存儲這些值。立即轉換爲java.time類型。
LocalDate stored = myJavaSqlDate.toLocalDate();
通過調用isEqual
,isBefore
,或isAfter
比較。你的問題不清楚,所以我不確定你的業務邏輯需要哪個。
if(stored.isBefore(today)) {
java.sql.Date dateToStore = java.sql.Date.valueOf(today);
// … store today’s date in database.
}
如果有需要,你可以將這個LocalDate
日期只到日期時間,得到相應的一些特定的時區,每天的第一刻。要知道,一天不不總是因爲夏令時(DST),也許還有其他異常時00:00:00.0
啓動。
ZonedDateTime zdt = LocalDate.atStartOfDay(zoneId);
toString
呼叫來生成日期時間值的標準ISO 8601格式的字符串表示。
String output = zdt.toString(); // Ex: 2016-12-03T00:00:00-05:00[America/Montreal]
Roy,你有一個想法,你將存儲你重置值的日期嗎?某處你將不得不堅持這個價值,並在稍後檢索它進行比較。也許屬性文件或表? –
是的,我有一個值表,存儲我想要更改的值 –
此表是否包含您更改值的日期?在你的例子中,這將存儲24/1/2015。 –