将当前时间与数据库中的数据时间进行比较

时间:2018-02-09 09:08:07

标签: java mysql date

我有一个数据库,其中我有用户的信息等。一个字段命名为" maeindat"并且存储了该权利(用户)

的条目(创建)的日期

现在我要比较当前时间是否为"较小"比输入日期以及是否将当前日期设置到字段中,但是如果输入日期大于当前日期设置进入字段的日期

current date < date of entry --> set current date into the field

current date > date of entry --> set date of entry in field

贝娄是我尝试的代码......

String maeindat = rs.getString("MAEINDAT");

LocalDateTime currTime = LocalDateTime.now();

if(currTime.isBefore(maeindat)) {
    currTime = maeindat;
}
else if(currTime.isAfter(maeindat)) {
    maeindat = maeindat;
}

更新:

String maeindat = rs.getString("MAEINDAT");

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYYMMDDHH24MI");
LocalDateTime maeindatDate = LocalDateTime.parse(maeindat, formatter);

LocalDateTime currTime = LocalDateTime.now();

if(currTime.isBefore(maeindatDate)) {
    currTime = maeindatDate;
}
else if (currTime.isAfter(maeindatDate)) {
    maeindatDate = maeindatDate;
}

1 个答案:

答案 0 :(得分:2)

TL;博士

LocalDateTime与当前时刻进行比较在逻辑上毫无意义。

myResultSet.getObject(
    … ,
    Instant.class            // Retrieve from database column of type similar to SQL-standard `TIMESTAMP WITH TIME ZONE`.
).isBefore( Instant.now() )  // Or `isAfter` or `equals` or combine with `!` (meaning NOT before/after).

苹果&amp;桔子

您无法将字符串与日期时间对象进行比较。将您的字符串解析为日期时间对象,然后然后进行比较。

LocalDateTime

LocalDateTime类缺少任何时区概念或从UTC偏移。仅当在数据库中使用类似于SQL标准TIMESTAMP WITHOUT TIME ZONE的类的列时才使用此类。

此类型旨在表示实际时刻,时间轴上的特定点。相反,这种类型只是在大约26-27小时范围内传播的潜在时刻的粗略概念。

如果我们说“圣诞老人在12月25日午夜之后送出玩具”,我们的意思是在新西兰奥克兰的午夜之后,或者我们是指几小时后在加尔各答印度的午夜?或者巴黎法国更多时间之后呢?在你指定奥克兰,加尔各答或巴黎之前,“午夜”没有任何实际意义。

LocalDateTime与当前时刻进行比较是没有意义的!如果没有时区或偏移的上下文,LocalDateTime没有实际意义。如果您知道该值的某个适当时区,请应用ZoneId获取ZonedDateTime。那时,你有一个实际的时刻,时间轴上的一个点。

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = myLocalDateTime.atZone( z ) ;  // Converting vague idea about potential moments into an actual moment, a specific point on the timeline.

Instant

如果您打算表示实际时刻,请使用SQL标准类型TIMESTAMP WITH TIME ZONE和Java类型Instant(UTC)或可能ZonedDateTime

Instant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。

Instant instant = myResultSet.getObject( … , Instant.class ) ;

以UTC格式捕获当前时刻。

Instant instantNow = Instant.now() ;  // Current moment in UTC.

使用isBeforeisAfterequals进行比较。

boolean targetPassed = instant.isAfter( instantNow ) ; 

智能对象,而不是愚蠢的字符串。

如果JDBC driver符合JDBC 4.2及更高版本,您可以直接与数据库交换 java.time 对象。无需转换为字符串。

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ; // For database column of type like `TIMESTAMP WITHOUT TIME ZONE`.

或者...

Instant instant = myResultSet.getObject( … , Instant.class ) ; // For database column of type like `TIMESTAMP WITH TIME ZONE`.

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore