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 —
observatiesays 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_localshows 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."
}
}
}
GEThttps://oneapi.ro/api/utile/v1/timp/tranzitii/Asia%2FTokyo?an=2027
{
"data": {
"zona": "Asia/Tokyo",
"an": 2027,
"inregistrari": 0,
"tranzitii": [],
"observatie": "Zona nu are treceri de oră în anul cerut — fie n-a avut niciodată ora de vară, fie a renunțat la ea.",
"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."
}
}
}
GEThttps://oneapi.ro/api/utile/v1/timp/tranzitii/Europe%2FLondon
{
"data": {
"zona": "Europe/London",
"an": 2026,
"inregistrari": 2,
"tranzitii": [
{
"moment_utc": "2026-03-29T01: 00: 00+00: 00",
"moment_local": "2026-03-29T02: 00: 00+01: 00",
"offset_secunde": 3600,
"offset": "+01: 00",
"ora_de_vara": true,
"abreviere": "BST"
}
],
"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."
}
}
}
GEThttps://oneapi.ro/api/utile/v1/timp/tranzitii/Asia%2FTokyo
{
"data": {
"zona": "Asia/Tokyo",
"an": 2026,
"inregistrari": 0,
"tranzitii": [],
"observatie": "Zona nu are treceri de oră în anul cerut — fie n-a avut niciodată ora de vară, fie a renunțat la ea.",
"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
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 404 | negasit | The zone does not exist. |
| 422 | validare | The year falls outside 1900–2100. |
| 429 | cota_depasita | The 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."
]
}
}
}