3

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?

0

1 Answer 1

4

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)) { [...] } 
Sign up to request clarification or add additional context in comments.

7 Comments

Thanks, please also show how to compare using timestamp.before(), I don't think that the .before() method can take a long as a parameter?
@java123999 No but you can use the long value to create a new Timestamp. Then use TImestamp.before(Timestamp).
ok, how to create a new timestamp from the long value? I am only new to using timestamps and dates etc, hence the easy questions!
@java123999 I edited the answer it order to show it.
Thanks for your help, what Time library would you suggest learning for use with Java? It seems timestamp is not very useful compared to others?
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.