as.date
Funkce převodu data na znak a ze znaku
as.Date {base} | Dokumentace R v češtině |
Popis
Funkce pro převod mezi reprezentacemi znaků a objekty třídy "Date"
představující data kalendáře.
Použití
as.Date(x, ...) ## S3 metoda pro třídu 'character'
as.Date(x, format, tryFormats = c("%Y-%m-%d", "%Y/%m/%d"),
optional = FALSE, ...)
## S3 metoda pro třídu 'numeric'
as.Date(x, origin, ...)
## S3 metoda pro třídu 'POSIXct'
as.Date(x, tz = "UTC", ...)
## S3 metoda pro třídu 'Date'
format(x, ...)
## S3 metoda pro třídu 'Date'
as.character(x, ...)
Argumenty
x |
objekt, který má být konvertován. |
format |
|
tryFormats |
|
optional |
|
origin |
objekt |
tz |
název časového pásma. |
... |
další argumenty, které mají být předány do nebo z jiných metod, včetně |
Detaily
Obvyklé pravidla pro recyklování vektorů se vztahují na x
a format
, takže odpověď bude mít délku delšího z vektorů.
V případě potřeby a dostupnosti se používají konverze do a z řetězců znaků specifické pro daný jazyk. To ovlivňuje názvy dnů a měsíců.
Metody as.Date
přijímají znakové řetězce, faktory, logické NA
a objekty tříd "POSIXlt"
a "POSIXct"
. (Poslední je převedena na dny ignorováním času po půlnoci ve znázornění času ve specifikované časové zóně, výchozí UTC.) Také objekty třídy "date"
(z balíčku date) a "dates"
(z balíčku chron). Znakové řetězce jsou zpracovávány tak, jak je to nutné pro zadaný formát: všechny koncové (trailing) znaky jsou ignorovány.
as.Date
přijme číselné údaje (počet dnů od určité epochy), ale pouze pokud je dodán origin
.
Metody format
a as.character
ignorují jakoukoli zlomkovou část data.
Hodnota
Metody format
a as.character
vrací znakový vektor, který představuje datum. Data NA
jsou vrácena jako NA_character_
.
Metody as.Date
vrací objekt třídy "Date"
.
Konverze z jiných systémů
Většina systémů interně zaznamenává data jako počet dní od nějakého počátku, ale to se spojuje s problémy, včetně
-
Je počátek den 0 nebo den 1? Jak ukazují ‘Příklady’, Excel dokáže použít obě možnosti pro své dva datové systémy.
-
Pokud je počátek dostatečně dávno, mohou návrháři projevit svou nevědomost o kalendářových systémech. Například navrhovatel aplikace Excel považoval 1900 za přestupný rok (tvrdil, že zkopíroval chybu z dřívějších tabulek DOS) a navrhovatel Matlabu si vybral neexistující datum ‘leden 0, 0000’ (takový den neexistuje), aniž by specifikoval kalendář. (Existuje takový rok v ‘gregoriánském’ kalendáři, jak je používán v ISO 8601: 2004, ale to říká, že se pro roky před rokem 1582 má používat pouze se souhlasem stran při výměně informací.)
Jediným bezpečným postupem je kontrola ostatních hodnot systémů pro známá data: zprávy na internetu (včetně R-help) jsou častěji nesprávné než správné.
Poznámka
Výchozí formáty se řídí pravidly mezinárodního standardu ISO 8601, který vyjadřuje den jako "2001-02-03"
.
Pokud řetězec data úplně nespecifikuje datum, vrácená odpověď může být specifická pro systém. Nejčastějším chováním je předpokládat, že chybějící rok, měsíc nebo den je aktuální. Pokud nesprávně určí datum, spolehlivé implementace vrátí chybu a datum je uvedeno jako NA
. Bohužel některé běžné implementace (například jako glibc) jsou nespolehlivé a zamýšlený význam hádají.
Roky před 1CE (aka 1AD) se pravděpodobně nebudou zpracovávat správně.
Reference
International Organization for Standardization (2004, 1988, 1997, ...) ISO 8601. Data elements and interchange formats – Information interchange – Representation of dates and times. Pro odkazy na verze dostupné on-line viz (v době psaní) http://www.qsl.net/g1smd/isopdf.htm.
Viz také
Date pro podrobnosti o datové třídě; locales
pro zjištění nebo nastavení místních nastavení.
Na stránkách nápovědy vašeho systému na stránkách strftime
a strptime
se dozvíte, jak specifikovat jejich formáty. Uživatelé systému Windows nenajdou stránku s nápovědou pro strptime
: používá se kód založený na glibc (s opravami), takže jsou zde podporovány všechny specifikátory formátu zde popsané, ale v žádném místním nastavení nejsou k dispozici žádná alternativní reprezentace čísel ani éry.
Příklady
## verze daného data specifická pro místní nastavení
format(Sys.Date(), "%a %b %d")
## číst informace o datu ve formátu 'ddmmmyyyy'
## Tohle v některých místních nastaveních vrátí NA(s); nastavení místních nastavení C
## tohle se překoná u většiny systémů jako v komentovaných řádcích
## lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")
x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
## Sys.setlocale("LC_TIME", lct)
z
## číst informace o datech a časech ve formátu 'm/d/y'
dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")
as.Date(dates, "%m/%d/%y")
## datum uvedený jako počet dnů od 1900-01-01 (datum v roce 1989)
as.Date(32768, origin = "1900-01-01")
## Aplikace Excel používá 1900-01-01 jako den 1 (výchozí ve Windows) nebo
## 1904-01-01 jako den 0 (výchozí na Mac), ale to je komplikované aplikací Excel,
## která nesprávně zachází s rokem 1900 jako s přestupným rokem.
## Takže pro data (po roce 1901) z Windows Excel
as.Date(35981, origin = "1899-12-30") # 1998-07-05
## a Mac Excel
as.Date(34519, origin = "1904-01-01") # 1998-07-05
## (tyto hodnoty pocházejí z from http://support.microsoft.com/kb/214330)
## Experiment ukazuje, že počátek v Matlabu je 719529 dní před naším,
## (považuje neexistující 0000-01-01 za den 1),
## takže Matlab den 734373 může být importován jako
as.Date(734373, origin = "1970-01-01") - 719529 # 2010-08-23
## (hodnota z
## http://www.mathworks.de/de/help/matlab/matlab_prog/represent-date-and-times-in-MATLAB.html)
## Efekt časového pásma
z <- ISOdate(2010, 04, 13, c(0,12)) # půlnoc a poledne UTC
as.Date(z) # in UTC
## názvy těchto časových pásem jsou běžné
as.Date(z, tz = "NZ")
as.Date(z, tz = "HST") # Hawaii