2016-08-17 81 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

相關問題