如何检查时间戳是否超过特定月数?

时间:2016-08-17 10:38:54

标签: java timestamp jodatime illegalargumentexception

我正在尝试测试timestamp(我的实体中的字段)是否超过特定月数。

我目前的代码是:

if(person.getBirthday().before(Timestamp.valueOf(String.valueOf(LocalDateTime.now().minusMonths(12)){
   //do something
}

注意:生日是timestamp字段,LocalDateTime来自:org.joda.time.LocalDateTime

问题是这段代码给了我错误

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:130)
Caused by: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
    at java.sql.Timestamp.valueOf(Timestamp.java:202)

我如何检查时间戳是否超过特定月数?

1 个答案:

答案 0 :(得分:4)

这里:

Timestamp.valueOf(String.valueOf(LocalDateTime.now() [...])

您正在将LocalDateTime(从joda时间)转换为字符串并期望Timestamp.valueOf(来自java.sql.Timestamp)能够解析它,但他们不会使用相同的日期格式。

你应该将LocalDateTime转换为时间戳(即毫秒数),然后从这一点进行比较。

示例:

long timestamp = LocalDateTime.now().minusMonths(12).toDateTime().getMillis()

编辑:

然后,您可以使用此长值创建新的Timestamp并使用Timestamp.before(Timestamp)进行比较:

if(person.getBirthday().before(new Timestamp(timestamp)) {
  [...]
}