oneapi
Sign in
Utile v1 / Timp

Daylight-saving transitions

A zone's daylight-saving transitions over a year: the exact moment of each switch, in UTC and locally, and the offset before and after.

GET
https://oneapi.ro/api/utile/v1/timp/tranzitii/{zona}

Path parameters

NameTypeDescriptionExample
zonarequired string IANA time-zone name, URL-encoded.

Query parameters

NameTypeDescriptionAccepted values
anoptional integer | null The year, between 1900 and 2100. Defaults to the current year. 1900 – 2100

How it behaves

  • Most zones have two transitions a year; some have none. Japan has had no daylight saving since 1951, and an empty list means exactly that, not missing data — observatie says so.
  • The local time of a transition "jumps": on 29 March 2026 in Bucharest the clock goes from 03:00 straight to 04:00, so moment_local shows the time AFTER the jump. The UTC moment is the unambiguous one.
  • The state at the start of the year is NOT reported as a transition. Included, it would make every zone in the world look as though it changed its clocks at midnight on 1 January.

What it is for

  • Avoid scheduling a recurring job in the hour that disappears when the clocks go forward.
  • Explain in a report why a day had 23 or 25 hours.
  • Check whether a country still changes its clocks next year.

Response structure

All fields below live inside data.

FieldTypeDescription
zona string The bidding zone or territory the data refers to.
an integer The year the data refers to.
inregistrari integer How many transitions the year has.
tranzitii[].moment_utc string The moment of the change, in UTC — the unambiguous form.
tranzitii[].moment_local string The same moment in local time, AFTER the jump.
tranzitii[].offset_secunde integer
tranzitii[].offset string The new offset from UTC.
tranzitii[].ora_de_vara boolean Whether the zone is on daylight saving after the change.
tranzitii[].abreviere string The new zone abbreviation.
observatie string Explains an empty list and the local-time jump.
sursa.nume string Name of the official source.
sursa.versiune string Version of the dataset or artefact the values come from.
sursa.licenta string The licence under which the source allows reuse.
sursa.observatie string What to know about the source before using the data.

Response examples

GEThttps://oneapi.ro/api/utile/v1/timp/tranzitii/Europe%2FBucharest
{
    "data": {
        "zona": "Europe/Bucharest",
        "an": 2026,
        "inregistrari": 2,
        "tranzitii": [
            {
                "moment_utc": "2026-03-29T01: 00: 00+00: 00",
                "moment_local": "2026-03-29T04: 00: 00+03: 00",
                "offset_secunde": 10800,
                "offset": "+03: 00",
                "ora_de_vara": true,
                "abreviere": "EEST"
            }
        ],
        "observatie": "Momentele sunt date și în UTC, și în ora locală. Ora locală a unei treceri „sare\": la 29 martie 2026, în București, ora 03: 00 nu există.",
        "sursa": {
            "nume": "IANA Time Zone Database (tzdata), prin runtime-ul PHP",
            "versiune": "2026.3",
            "licenta": "Domeniu public.",
            "observatie": "Se actualizează la un upgrade de imagine, nu printr-un import. Fusurile chiar se schimbă prin decizii politice, uneori cu săptămâni înainte — de aceea versiunea e în răspuns."
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitThe zone does not exist.
422validareThe year falls outside 1900–2100.
429cota_depasitaThe plan's monthly quota has been exceeded (see Retry-After).

All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "The year falls outside 1900–2100.",
        "detalii": {
            "zona": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}