目前我正在尝试让我的java程序重置一些值。重置这些值的触发器将是新一天的开始。例如,如果日期是24/1/2015,我打开程序来完成我的工作并关闭程序。如果我在2015年1月24日打开该程序,它将不会重置该程序。但是,如果我在2015年1月25日打开该程序,它将重置MySQL数据库中的值。
因此。如何验证重置数据库中值的时间/日期?
答案 0 :(得分:0)
使用getTodayAtMidnight()方法计算您可以设置值的下一个有效时间。将此值存储在表中。然后使用' now.after(nextSetDate)'看它是否返回' true'。如果是这样,您可以重置值,并存储下一个日期。如果返回false,则表示您仍处于同一日期,不应重置值。如果您有任何问题,请告诉我。
test_cases = [ {1337:'foo'}, [1337, 'foo'] ]
for case in test_cases:
if type(case) is dict:
for k, v in case.items():
print(k, v)
elif type(case) is list:
for i in case:
print(i)
答案 1 :(得分:0)
避免使用与最早版本的Java捆绑在一起的臭名昭着的旧日期时间类。使用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]