根据MySQL

时间:2016-01-24 02:43:29

标签: java mysql

目前我正在尝试让我的java程序重置一些值。重置这些值的触发器将是新一天的开始。例如,如果日期是24/1/2015,我打开程序来完成我的工作并关闭程序。如果我在2015年1月24日打开该程序,它将不会重置该程序。但是,如果我在2015年1月25日打开该程序,它将重置MySQL数据库中的值。

因此。如何验证重置数据库中值的时间/日期?

2 个答案:

答案 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.time

避免使用与最早版本的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(); 

通过致电isEqualisBeforeisAfter进行比较。您的问题不明确,因此我不确定您的业务逻辑需要哪些。

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]