Opened 5 years ago

Last modified 3 years ago

#17925 assigned enhancement

Support leap seconds

Reported by: Don-vip Owned by: Don-vip
Priority: normal Milestone:
Component: Core Version:
Keywords: date time leap second utc gps sotmfr2019 Cc: StephaneP

Description (last modified by Don-vip)

RTKLib Positioning Solution File (.pos) support has been added in #17829.

Right now JOSM considers date are expressed in UTC but in fact they're using GPS time.

They currently differ by 18 seconds (number of leap seconds added to UTC since 1980 UTC-GPS synchronization).

It's not easy to support leap seconds in Java because Java date/time classes don't support them.

The only Java libraries that support leap seconds are Time4J and threeten-extra.

Attachments (0)

Change History (18)

comment:1 by Don-vip, 5 years ago

Cc: StephaneP added

comment:2 by Don-vip, 5 years ago

Description: modified (diff)

comment:4 by Don-vip, 5 years ago

Description: modified (diff)

comment:5 by Don-vip, 5 years ago

Description: modified (diff)

comment:6 by stoecker, 5 years ago

Supporting leap seconds means constant updates every half year. Is this really necessary for JOSM?

comment:7 by Don-vip, 5 years ago

Why half year? The latest leap second has been added in 2016.

comment:8 by stoecker, 5 years ago

Leap seconds may or may not be added at 30.06. or 31.12. each year. It is not deterministic and announced approx. 6 months before by the IERS ( So to make it right we need to create another admin task to get and check these announcements and update JOSM when necessary.

And all that for a value, which has no real meaning for JOSM.

comment:9 by Don-vip, 5 years ago

We have a new major Java version every 6 months. The workload of checking if we must add a +1 in a text file is nothing compared to that. And it has a meaning for users like Stéphane. The coding part involves some work, but the maintenance is insignificant.

comment:10 by stoecker, 5 years ago

Coding is easy. Store the files like this and simply apply the value of leap seconds:

comment:11 by stoecker, 5 years ago

Algorithm for GPS conversion:

  • Parse the list reverse (last entry first)
    • when date_to_fix >= leapdate+86400+leapseconds-19, subtract the leap seconds-19, done
    • if not try previous entry

Usually the last value is correct, so only one check is done.

Optimization: When parsing the file, already store date as "leapdata+86400+leapseconds-19" and the leap as "leap-19".

NOTE: Leap seconds may be negative or positive. That means either 23:59:59 is missing or 23:59:60 exists. ATM leaps have always been positive.

Above link can be used as data base. It will be updated by me as long as I'm responsible for the software using it.

comment:12 by anonymous, 5 years ago

Just FYI, leap seconds can also be introduced in March and September (, but given the current interval rate it's highly unlikely that will happen anytime soon.

comment:13 by Don-vip, 5 years ago

Milestone: 19.0819.09

comment:14 by Don-vip, 5 years ago

Milestone: 19.09

comment:15 by simon04, 4 years ago

Ticket #19932 has been marked as a duplicate of this ticket.

comment:16 by simon04, 3 years ago

The OpenJDK build includes the following file related to leap seconds from tzdata:

On GNU/Linux, the file is available under /usr/share/zoneinfo/leapseconds (Fedora).

For good test cases see ticket:17829#comment:19

comment:17 by skyper, 3 years ago

This file is part of the package tzdata and the file name is a bit different on Debian:

-rw-r--r-- 1 root root 10666 Jan  9 19:59 /usr/share/zoneinfo/leap-seconds.list

comment:18 by Don-vip, 3 years ago

Not sure we can rely on OS here. Windows has limited leap second support. It seems it can handle future leap seconds fine, but I can't retrieve past ones (before june 2018) using their tool:

w32tm /leapseconds /getstatus /verbose

[Secondes intercalaires]
Activé : 1 (Local)
Nombre de secondes intercalaires (après juin 2018) : 0 (local)
Liste des secondes intercalaires (local) :

Or maybe we can ship the list of leap seconds for the 1980-2018 period and rely on OS after that (need to check macOS support too).

Modify Ticket

Change Properties
Set your email in Preferences
as assigned The owner will remain Don-vip.
as The resolution will be set. Next status will be 'closed'.
to The owner will be changed from Don-vip to the specified user. Next status will be 'new'.
Next status will be 'needinfo'. The owner will be changed from Don-vip to Don-vip.
as duplicate The resolution will be set to duplicate. Next status will be 'closed'. The specified ticket will be cross-referenced with this ticket.

Add Comment

E-mail address and name can be saved in the Preferences .
Note: See TracTickets for help on using tickets.