30

I have an instance of Instant (org.joda.time.Instant) which I get in some api response. I have another instance from (java.time.Instant) which I get from some other call. Now, I want to compare these two object to check which one get the latest one. How would it be possible?

Ole V.V.
  • 81,772
  • 15
  • 137
  • 161
user123475
  • 1,065
  • 4
  • 17
  • 29

3 Answers3

41

getMillis() from joda.time can be compared to toEpochMilli() from java.time.

Class documentation:

Example code.

java.time.Instant myJavaInstant = 
    java.time.Instant.ofEpochMilli( myJodaInstant.getMillis() ) ;

Going the other way.

// Caution: Loss of data if the java.time.Instant has microsecond
// or nanosecond fraction of second.
org.joda.time.Instant myJodaInstant = 
    new org.joda.time.Instant( myJavaInstant.toEpochMilli() ); 
Alexander Oh
  • 24,223
  • 14
  • 73
  • 76
discipliuned
  • 916
  • 7
  • 13
2

You can convert from joda Instant to java's (the datetime and formatting are just an example):

org.joda.time.Instant.parse("10.02.2017 13:45:32", DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss")).toDate().toInstant()

So you call toDate() and toInstant() on your joda Instant.

xYan
  • 587
  • 7
  • 17
  • the call to `parse` makes this answer confusing, but actually calling `toDate` returns a `java.util.Date`, which can be used to get the Instant... – Jason Mar 06 '19 at 21:10
  • hence the brackets: (the datetime and formatting are just an example) – xYan Mar 08 '19 at 07:27
0

I think there is a bug in the Joda-Time sdk. It changes the time and time zone when you convert this way.

My original ISO string is: originalISOString = 2023-08-02T22:00:00.000+01:00

I run the step above as: org.joda.time.Instant.parse(originalISOString, ISODateTimeFormat.dateTime()).toDate().toInstant();

but after running through the step above, my resulting string (using Instant.toString()) is 2023-08-02T21:00:00Z

It has changed the time and the time zone.

  • 1
    The output is correct. It's not a bug; it's the expected behaviour. An `Instant` gives you a date-time denoting a moment at UTC (which is specified by a `Z`). – Arvind Kumar Avinash Aug 05 '23 at 14:17
  • So your answer is that there is a bug in Joda-Time SDK? Apparently not, according to the comment to your answer. So how does your answer help anybody who is experiencing this problem? Your answer seems more suitable as a comment - but you can't comment as you don't have enough reputation. Maybe consider deleting this answer? – Abra Aug 07 '23 at 06:35