2016-08-17 39 views
1

我想测试一个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) 

我还可以检查时间戳是否比某个数字早? f月?

回答

4

这里:

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

你是一个LocalDateTime(从约达时间)转换为字符串,并期望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)) { 
    [...] 
} 
+0

感谢,也请您展示如何使用比较timestamp.before(),我不认为.before()方法可能需要很长时间作为参数? – java123999

+0

@ java123999不可以,但您可以使用long值来创建一个新的'Timestamp'。然后使用'TImestamp.before(Timestamp)'。 –

+0

好的,如何从long值创建新的时间戳?我只是使用时间戳和日期等新东西,因此容易的问题! – java123999

相关问题