Skip to main content

Posts

Showing posts from August, 2021

Postgres Timestamps and Java

Postgres timestamps are up to microseconds resolution. This can be seen here in the Postgres V13 docs . This means that if you are trying to save a ZonedDateTime type into to the DB, you should cut-off the Nano-seconds portion of the time. Otherwise, if you save a time with Nano secs, and you read that time back from the DB, you will have different times. This is because the time from the DB is missing the nano-secs. So how does one go about doing this? Rounding Nanoseconds Essentially do to this, first need to get the nano secs of the second via: Integer nanoSecs = zonedDateTime .get( ChronoField . NANO_OF_SECOND ) ; This amount now has to be converted to micro-secs by dividing by 1000. This removes the nano-seconds the amount. Don't forget that the nano-secs that we just removed by dividing may be more then 500. In which case you should add 1 to the microseconds. Then we need to multiply by 1000 to get the amount back in nano-secs. By doing this we turn all the nano-secs to ZERO