Home > Software design >  Converting java.sql.timestamp to millisecond format
Converting java.sql.timestamp to millisecond format

Time:09-22

I have a private java.sql.Timestamp myDate in some model (POJO) class like below

private String isActive;
private Date dob;
private Timestamp createdDate;
private Timestamp lastMktPrefUpdateAt;

We were using spring boot version to 1.5.10.RELEASE and REST API response for timestamp field was in millisecond format like below -

   {
        "isActive": "y",
        "lastMktPrefUpdateAt": 1632195609787,
        "dob": "08/12/1991",
        "createdDate": 1632195609788
    }

We have recently upgraded the spring boot version to 2.3.0.RELEASE and this started sending timestamp field in response to some ISO format like below -

  {
        "isActive": "y",
        "lastMktPrefUpdateAt": "2021-09-20T22:10:09.787 0000",
        "dob": "07/12/1991",
        "createdDate": "2021-09-20T22:10:09.788 0000"
    }

Can someone please help answering, how can we format Timestamp back to millisecond format? We need to format Timestamp at global level meaning without changing all the POJO classes.

CodePudding user response:

Try this in your properties file

spring.jackson.serialization.write-dates-as-timestamps:true

OR
Use @JsonFormat(shape = JsonFormat.Shape.NUMBER) above the property that you want.

Update

If you want to add millis to your timestamp, try to pass the long value to the Timestamp constructor and call the getTime() method to receive a 13-digits timestamp.

   long now = System.currentTimeMillis();
   Timestamp timeStamp= new Timestamp(now);
   System.out.println(timeStamp.getTime());

CodePudding user response:

You could convert that string to a ZonedDateTime object which has a .toInstant().toEpochMilli() method.

Something like: long millis = ZonedDateTime.of(LocalDateTime.parse(str), ZoneId.of("Etc/UTC")).toInstant().toEpochMilli();

see:

How to get milliseconds from LocalDateTime in Java 8

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html

However, I would recommend refactoring the system to use the immutable LocalDatTime object at a later point.

(There may be an appropriate annotation you can put on that timestamp field to parse it in a specific way, but not one that I am aware of.)

  • Related