java123999 java123999 - 3 months ago 16
Java Question

How to check that a timestamp is older than a certain number of months?

I am trying to test that a

timestamp
(a field in my entity) is older than a certain number of months.

My current code is:

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


Note: birthday is a
timestamp
field and
LocalDateTime
is from:
org.joda.time.LocalDateTime


The issue is that this code is giving me the error:

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)


How else can I check that a timestamp is older than a certain number of months?

Answer

Here :

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

You are converting a LocalDateTime (from joda time) to a String and expect Timestamp.valueOf (from java.sql.Timestamp) to be able to parse it but they don't use the same date format.

You should convert the LocalDateTime to a timestamp (i.e. number of milliseconds) then compare from this point.

Example :

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

EDIT :

Then you can create a new Timestamp from this long value and compare using Timestamp.before(Timestamp) :

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