ISO 8601
Z Wikipedii
ISO 8601 to 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 PN-EN 28601:2002[1] (poprzednio PN-90/N-01204), natomiast stosowaniu tego standardu 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).
Spis treści |
[edytuj] 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.
[edytuj] 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.
[edytuj] 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.
[edytuj] Daty tygodniowe
Data tygodniowa to taka, w której dzień jest oznaczany jako kolejny w kolejnym tygodniu roku. Tydzień oznaczany jest dwoma cyframi od 01 do 52 lub 53. Dzień oznaczany jest jedną cyfrą, od 1 - poniedziałek do 7 - niedziela. 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-6.
[edytuj] 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ą cześć, 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.
[edytuj] 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. Czas zimowy w Polsce 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.
[edytuj] Łą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.
Aktualny czas UTC podany w rozszerzonym wariancie standardu ISO 8601: 2007-04-15T11:07Z.
[edytuj] 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
Funkcja date() w PHP:
<?php $timeoffset = intval(date("Z")); echo date("Y-m-d",time()-$timeoffset).'T'.date("H:i:s",time()-$timeoffset).'Z'; echo"\n"; ?>