ISO 8601

Motyw ISO 8601 przyciąga uwagę ludzi w każdym wieku i na każdym poziomie życia. Od wpływu na społeczeństwo po wpływ na świat rozrywki, ISO 8601 w taki czy inny sposób pozostawił po sobie ślad. W tym artykule zbadamy różne aspekty ISO 8601 i przeanalizujemy jego znaczenie w naszym codziennym życiu. Poprzez wywiady z ekspertami w tej dziedzinie i odpowiednie studia przypadków będziemy starali się rzucić światło na ten temat, który jest dziś tak aktualny. Bez wątpienia ISO 8601 jest podstawowym aspektem, który zasługuje na dokładne zbadanie. Przygotuj się więc na głębokie zanurzenie się w ISO 8601 i wszystkim, co ma do zaoferowania.

ISO 8601 – międzynarodowa norma ISO określająca sposób zapisu daty i czasu. Obecna wersja (ISO 8601:2004) jest trzecią edycją dokumentu, datowaną na 2004-12-03. Zastępuje ona pierwszą edycję – ISO 8601:1988 – oraz drugą edycję – ISO 8601:2000. Polski odpowiednik to norma PN-EN 28601:2002[1] (poprzednio PN-82/01204 i PN-90/N-01204) wycofana w dniu 2008-05-29 bez zastąpienia. Stosowaniu standardu ISO 8601 w protokołach internetowych poświęcony jest RFC 3339 ↓.

Podstawowa koncepcja tego standardu polega na ustaleniu momentu w czasie z dokładnością ustaloną przez użytkownika za pomocą odpowiednio sformatowanych ciągów znaków ustawionych w porządku od najbardziej znaczących (rok) do najmniej znaczących (sekundy bądź ich części). Norma określa numeryczny format daty i czasu (bez używania nazw miesięcy, dni tygodnia czy literowych oznaczeń czasu przed lub po południu).

Zapis daty

W standardzie ISO 8601 daty mogą być przedstawione na trzy różne sposoby: daty kalendarzowe, daty porządkowe i daty tygodniowe. Standard korzysta z kalendarza gregoriańskiego. Należy zwrócić uwagę, że rok 0001 w standardzie ISO 8601 oznacza 1 rok n.e., poprzedni – 0000 – oznacza rok 1 p.n.e., a –0001 to rok 2 p.n.e. itd. Dla uniknięcia dwuznaczności rok powinien być zapisywany za pomocą czterech cyfr.

Daty kalendarzowe

Data kalendarzowa to data, w której dzień jest liczony kolejno w każdym miesiącu. Np. 2 stycznia to data kalendarzowa. W standardzie ISO 8601 data kalendarzowa ma format YYYY-MM-DD, czyli 2 dzień stycznia w roku 2005 zapisywany jest jako 2005-01-02. Można również opuścić separatory, zapisując datę w sposób 20050102. Format z separatorami to format rozszerzony, a bez to format podstawowy. Standard pozwala na przedstawianie dat z mniejszą precyzją: można zapisać 2005-01, co oznacza styczeń roku 2005.

Daty porządkowe

Data porządkowa to taka, w której dzień jest przedstawiony jako kolejny w całym roku, za pomocą trzech znaków z wiodącymi zerami. 2 stycznia to 002, 1 lutego to 032, itd. 31 grudnia to 365 lub 366 w latach przestępnych. Data porządkowa ma format YYYY-DDD. 2 stycznia 2005 zapisywany jest jako 2005-002, a w formacie podstawowym 2005002.

Daty tygodniowe

Data tygodniowa to taka, w której dzień jest oznaczany jako kolejny w kolejnym tygodniu roku. Tydzień oznaczany jest dwiema cyframi od 01 do 52 lub 53. Dzień oznaczany jest jedną cyfrą, od 1poniedziałek do 7niedziela. Format daty tygodniowej to YYYY-Www-D. Np. 2 lutego 2005 to 2005-W05-3 lub w zapisie podstawowym 2005W053 – trzeci dzień (środa) piątego tygodnia roku 2005.

Pierwszy tydzień roku to taki, w którym są przynajmniej 4 dni stycznia. Inaczej mówiąc, taki, w którym jest pierwszy czwartek stycznia lub dzień 4 stycznia. To oznacza, że tydzień 01 może zawierać dni z poprzedniego roku, a tydzień 53 – dni z następnego roku. Np. 1 stycznia 2005 wypadł w sobotę, więc 2004-W53 trwa od 27 grudnia 2004 do 2 stycznia 2005, a 2005-W01 zaczyna się 3 stycznia 2005 roku. Data kalendarzowa 2005-01-02 to data tygodniowa 2004-W53-7.

Zapis czasu

Standard używa czasu 24-godzinego. Format podstawowy to hhmmss, a rozszerzony to hh:mm:ss. Można oczywiście użyć mniejszej precyzji: hh:mm, hhmm lub hh.

Można również używać części sekund, minut lub godzin, zaznaczając to znakiem dziesiętnym: kropką lub przecinkiem w zależności od lokalnych ustaleń. Dzielić można tylko najmniej znaczącą część, więc, zapisując np. 14 godzin, 30 i pół minuty, nie umieszczamy sekund: 14:30,5.

Północ oznaczana jest zarówno 00:00 jak i 24:00. Np. 24:00 31 grudnia 2004 to ten sam moment co 00:00 1 stycznia 2005.

Strefy czasowe

Oznaczenia czasu UTC dokonuje się przez umieszczenie litery Z po czasie. Np. godzina 9:30 czasu UTC oznaczana jest 09:30Z lub 0930Z.

Inne strefy czasowe oznacza się, zaznaczając ich przesunięcie (offset) względem czasu UTC, w formacie ±hh:mm, ±hhmm lub ±hh. Standardowy czas geograficzny w Polsce (zwany zwyczajowo czasem zimowym) jest przesunięty o godzinę do przodu w stosunku do czasu UTC, a czas letni – o dwie godziny. Godzina 15:30 w Polsce w zimie zapisywana jest jako 15:30+01 i oznacza ten sam czas co 14:30Z.

Łączny zapis daty i czasu

Łącznie datę i czas w standardzie ISO 8601 zapisuje się, wstawiając literę T między zapis daty i czasu. Powszechnie używany jest zapis YYYY-MM-DDThh:mm:ss±hh:mm, np. 2005-01-02T03:01:45+01:00. Dopuszczalne i stosowane jest także rozdzielanie daty od czasu przy pomocy spacji: YYYY-MM-DD hh:mm:ss ±hh:mm[1].

Aktualny czas UTC podany w rozszerzonym wariancie standardu ISO 8601: 2025-04-17T13:37:24Z

Przykłady użycia

Polecenie date w konsoli systemów z rodziny Unix:

echo "Format rozszerzony YYYY-MM-DDThh:mm:ssZ"
date -u +%Y-%m-%dT%H:%M:%SZ
echo "Format podstawowy YYYYMMDDThhmmssZ"
date -u +%Y%m%dT%H%M%SZ
echo "Format podstawowy mniejszej precyzji YYYYMMDDThhmm"
date -u +%Y%m%dT%H%MZ
# date -I, --iso-8601  wypisanie daty/czasu w formacie ISO 8601.
# FORMAT=„date” dla podania samej daty (tryb domyślny), „hours” (godziny), „minutes”,
# „seconds” albo „ns” dla podania daty i czasu z pożądaną dokładnością.
date --iso-8601="minutes"

Funkcja date() w PHP:

<?php
$timeoffset = intval(date("Z"));
echo date("Y-m-d\TH:i:s\Z",time()-$timeoffset);
echo"\n";
// PHP 5 lub nowsze:
echo date("c"); // 2004-02-12T15:19:21+00:00
echo"\n";
?>

Funkcja Date#toISOString() w JavaScript:

let date = new Date('05 October 2011 14:48 UTC')

console.log(date.toISOString()) // powinno wyświetlić w konsoli 2011-10-05T14:48:00.000Z

Przypisy

  1. a b PN-EN 28601:2002 - wersja polska , sklep.pkn.pl (pol.).

Linki zewnętrzne