我有一个数据库,其中我有用户的信息等。一个字段命名为" 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;
}
答案 0 :(得分:2)
将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).
您无法将字符串与日期时间对象进行比较。将您的字符串解析为日期时间对象,然后然后进行比较。
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.
使用isBefore
,isAfter
,equals
进行比较。
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。