Datum und Uhrzeiten

Datum und Uhrzeiten

7.1 Einführung

Die Arbeit mit Datums- und Zeitangaben kann mühsam sein. Das liegt daran, dass Datum und Uhrzeit recht komplizierte Themen sind. Der Umgang mit Jahren, Monaten, Sommerzeit, Winterzeit, Zeitzonen und geografischen Unterschieden in Kalendern kann ziemlich kompliziert sein. R verfügt über eingebaute Funktionen für Datums- und Zeitangaben, doch diese Funktionen sind oft schwer zu bedienen. Deshalb wurde lubridate entwickelt, das eine Reihe von Funktionen enthält, die den Umgang mit Datum und Uhrzeit deutlich vereinfachen.

Wir aktivieren jetzt zwei Packages:

library(tidyverse)
library(lubridate)

In lubridate können Sie drei Arten von Datums- oder Zeitvariablen definieren:

  • date: Ein date ist ein Datum mit Jahr, Monat und Tag. In einem Tibble wird dies als <date> bezeichnet.
  • time: Ein time ist eine Uhrzeit. In einem Tibble wird dies als <time> bezeichnet. Für den Umgang mit Uhrzeiten wird das Package hms verwendet.
  • datetime: Ein datetime enthält sowohl Datum als auch Uhrzeit. In einem Tibble wird dies als <dttm> bezeichnet.

Verwenden Sie datetime nur, wenn es unbedingt nötig ist. Wenn Sie datetime verwenden, müssen Sie unter Umständen Zeitzonen berücksichtigen, damit die Berechnungen korrekt sind (siehe unten).

Um das heutige Datum zu erfahren, gibt man folgenden Befehl ein:

today()
[1] "2022-11-09"

Um das aktuelle Datum mit Uhrzeit zu erfahren, gibt man folgenden Befehl ein:

now()
[1] "2022-11-09 21:11:39 CET"

Lubridate speichert Datumsangaben als Anzahl der Tage seit einem Referenzdatum, nämlich 1970-01-01 00:00:00 GMT. Mit der Funktion [as_date()](https://lubridate.tidyverse.org/reference/as_date.html) können wir berechnen, welches Datum 10000 Tage nach diesem Referenzdatum lag:

as_date(10000)
[1] "1997-05-19"

Mit der Funktion as_datetime() können Sie das Datum mit Uhrzeit in Sekunden ab dem Referenzdatum berechnen:

as_datetime(3600)
[1] "1970-01-01 01:00:00 UTC"

In den allermeisten Fällen erhalten wir Datums- und Zeitangaben in Form von Zeichenketten. Um lubridate verwenden zu können, müssen wir die Reihenfolge der Zeitelemente (Jahr, Monat, Tag, Stunde, Minute, Sekunden) beachten. Anschließend können wir eine lubridate-Funktion wählen, die das Datum oder die Datums-Zeit-Angabe korrekt einlesen kann. In der folgenden Tabelle sehen Sie einige Beispiele für verschiedene Schreibweisen des Datums 31. Dezember 2020 sowie die entsprechende lubridate-Funktion, die das Datum einlesen kann:

Datumsformat Reihenfolge der Zeitelemente Funktion in lubridate
2020-12-31 YYYY-MM-DD ymd()
2020/12/31 YYYY/MM/DD ymd()
20201231 YYYYMMDD ymd()
20-12-31 YY-MM-DD ymd()
201231 YYMMDD ymd()

Datumsformate und die entsprechenden lubridate-Funktionen.

Testen wir das, indem wir einen Data Frame mit drei Personen erstellen, einschließlich ihres Namens, Geburtsdatums, Untersuchungsdatums und Sterbedatums. Alle Datumsangaben werden unterschiedlich geschrieben, um die Funktion [ymd()](https://lubridate.tidyverse.org/reference/ymd.html) zu testen:

## Vektoren erstellen
name <- c("David", "Mohammed", "Christina")
birth_date <- ymd("1990-01-01", "1999-01-04", "2002-05-05")
examination_date <- ymd("1990.01.01", "1999.01.04", "2002.05.05")
death_date <- ymd("2005/02/02", "2009/11/14", "2018/01/01")

## Vektoren zu einem Data Frame zusammenfügen
my_data <- data.frame(name, birth_date, examination_date, death_date)

## Data Frame anzeigen
my_data
       name birth_date examination_date death_date
1     David 1990-01-01       1990-01-01 2005-02-02
2  Mohammed 1999-01-04       1999-01-04 2009-11-14
3 Christina 2002-05-05       2002-05-05 2018-01-01

Ändern wir nun die Reihenfolge von Jahr, Monat und Tag in unseren Datumsangaben. Das ist unproblematisch, solange wir die Funktion in lubridate wechseln:

## Tag, Monat, Jahr
dmy("31-12-2022")
[1] "2022-12-31"
## Monat, Tag, Jahr
mdy("12-31-2022")
[1] "2022-12-31"
## Jahr, Monat, Tag
ymd("20221231")
[1] "2022-12-31"
## Gemischte Zeichenketten
mdy("December 31st 2022")
[1] "2022-12-31"
mdy("December, 31st, 2022")
[1] "2022-12-31"
dmy("31-Dec-2022")
[1] "2022-12-31"
dmy("31*Dec*2022")
[1] "2022-12-31"

Lubridate hat jede einzelne Datumszeichenkette verstanden!

Im nächsten Beispiel speichern wir ein Datum, das eine Uhrzeit enthält (Datums-Zeit-Angabe). Um es korrekt einzulesen, fügen wir die Buchstaben h (Stunde), m (Minuten) und s (Sekunden) wie folgt hinzu:

ymd_hms("2011-06-04 12:00:00")
[1] "2011-06-04 12:00:00 UTC"

Hier besteht auch die Möglichkeit, die genaue Kombination der Zeitelemente anzugeben:

mdy_hm("12/31/2022 10:35")
[1] "2022-12-31 10:35:00 UTC"

R hat dem Datum die Zeitzone UTC zugewiesen. R kann rund 600 Zeitzonen verarbeiten, einschließlich der Sommerzeiten, Winterzeiten und historischen Kalenderabweichungen dieser Zonen. Eine Liste aller Zeitzonen erhalten Sie mit folgendem Befehl:

OlsonNames()
  [1] "Africa/Abidjan"                   "Africa/Accra"
  [3] "Africa/Addis_Ababa"               "Africa/Algiers"
  [5] "Africa/Asmara"                    "Africa/Asmera"
  [7] "Africa/Bamako"                    "Africa/Bangui"
  [9] "Africa/Banjul"                    "Africa/Bissau"
 [11] "Africa/Blantyre"                  "Africa/Brazzaville"
 [13] "Africa/Bujumbura"                 "Africa/Cairo"
 [15] "Africa/Casablanca"                "Africa/Ceuta"
 [17] "Africa/Conakry"                   "Africa/Dakar"
 [19] "Africa/Dar_es_Salaam"             "Africa/Djibouti"
 [21] "Africa/Douala"                    "Africa/El_Aaiun"
 [23] "Africa/Freetown"                  "Africa/Gaborone"
 [25] "Africa/Harare"                    "Africa/Johannesburg"
 [27] "Africa/Juba"                      "Africa/Kampala"
 [29] "Africa/Khartoum"                  "Africa/Kigali"
 [31] "Africa/Kinshasa"                  "Africa/Lagos"
 [33] "Africa/Libreville"                "Africa/Lome"
 [35] "Africa/Luanda"                    "Africa/Lubumbashi"
 [37] "Africa/Lusaka"                    "Africa/Malabo"
 [39] "Africa/Maputo"                    "Africa/Maseru"
 [41] "Africa/Mbabane"                   "Africa/Mogadishu"
 [43] "Africa/Monrovia"                  "Africa/Nairobi"
 [45] "Africa/Ndjamena"                  "Africa/Niamey"
 [47] "Africa/Nouakchott"                "Africa/Ouagadougou"
 [49] "Africa/Porto-Novo"                "Africa/Sao_Tome"
 [51] "Africa/Timbuktu"                  "Africa/Tripoli"
 [53] "Africa/Tunis"                     "Africa/Windhoek"
 [55] "America/Adak"                     "America/Anchorage"
 [57] "America/Anguilla"                 "America/Antigua"
 [59] "America/Araguaina"                "America/Argentina/Buenos_Aires"
 [61] "America/Argentina/Catamarca"      "America/Argentina/ComodRivadavia"
 [63] "America/Argentina/Cordoba"        "America/Argentina/Jujuy"
 [65] "America/Argentina/La_Rioja"       "America/Argentina/Mendoza"
 [67] "America/Argentina/Rio_Gallegos"   "America/Argentina/Salta"
 [69] "America/Argentina/San_Juan"       "America/Argentina/San_Luis"
 [71] "America/Argentina/Tucuman"        "America/Argentina/Ushuaia"
 [73] "America/Aruba"                    "America/Asuncion"
 [75] "America/Atikokan"                 "America/Atka"
 [77] "America/Bahia"                    "America/Bahia_Banderas"
 [79] "America/Barbados"                 "America/Belem"
 [81] "America/Belize"                   "America/Blanc-Sablon"
 [83] "America/Boa_Vista"                "America/Bogota"
 [85] "America/Boise"                    "America/Buenos_Aires"
 [87] "America/Cambridge_Bay"            "America/Campo_Grande"
 [89] "America/Cancun"                   "America/Caracas"
 [91] "America/Catamarca"                "America/Cayenne"
 [93] "America/Cayman"                   "America/Chicago"
 [95] "America/Chihuahua"                "America/Coral_Harbour"
 [97] "America/Cordoba"                  "America/Costa_Rica"
 [99] "America/Creston"                  "America/Cuiaba"
[101] "America/Curacao"                  "America/Danmarkshavn"
[103] "America/Dawson"                   "America/Dawson_Creek"
[105] "America/Denver"                   "America/Detroit"
[107] "America/Dominica"                 "America/Edmonton"
[109] "America/Eirunepe"                 "America/El_Salvador"
[111] "America/Ensenada"                 "America/Fort_Nelson"
[113] "America/Fort_Wayne"               "America/Fortaleza"
[115] "America/Glace_Bay"                "America/Godthab"
[117] "America/Goose_Bay"                "America/Grand_Turk"
[119] "America/Grenada"                  "America/Guadeloupe"
[121] "America/Guatemala"                "America/Guayaquil"
[123] "America/Guyana"                   "America/Halifax"
[125] "America/Havana"                   "America/Hermosillo"
[127] "America/Indiana/Indianapolis"     "America/Indiana/Knox"
[129] "America/Indiana/Marengo"          "America/Indiana/Petersburg"
[131] "America/Indiana/Tell_City"        "America/Indiana/Vevay"
[133] "America/Indiana/Vincennes"        "America/Indiana/Winamac"
[135] "America/Indianapolis"             "America/Inuvik"
[137] "America/Iqaluit"                  "America/Jamaica"
[139] "America/Jujuy"                    "America/Juneau"
[141] "America/Kentucky/Louisville"      "America/Kentucky/Monticello"
[143] "America/Knox_IN"                  "America/Kralendijk"
[145] "America/La_Paz"                   "America/Lima"
[147] "America/Los_Angeles"              "America/Louisville"
[149] "America/Lower_Princes"            "America/Maceio"
[151] "America/Managua"                  "America/Manaus"
[153] "America/Marigot"                  "America/Martinique"
[155] "America/Matamoros"                "America/Mazatlan"
[157] "America/Mendoza"                  "America/Menominee"
[159] "America/Merida"                   "America/Metlakatla"
[161] "America/Mexico_City"              "America/Miquelon"
[163] "America/Moncton"                  "America/Monterrey"
[165] "America/Montevideo"               "America/Montreal"
[167] "America/Montserrat"               "America/Nassau"
[169] "America/New_York"                 "America/Nipigon"
[171] "America/Nome"                     "America/Noronha"
[173] "America/North_Dakota/Beulah"      "America/North_Dakota/Center"
[175] "America/North_Dakota/New_Salem"   "America/Nuuk"
[177] "America/Ojinaga"                  "America/Panama"
[179] "America/Pangnirtung"              "America/Paramaribo"
[181] "America/Phoenix"                  "America/Port_of_Spain"
[183] "America/Port-au-Prince"           "America/Porto_Acre"
[185] "America/Porto_Velho"              "America/Puerto_Rico"
[187] "America/Punta_Arenas"             "America/Rainy_River"
[189] "America/Rankin_Inlet"             "America/Recife"
[191] "America/Regina"                   "America/Resolute"
[193] "America/Rio_Branco"               "America/Rosario"
[195] "America/Santa_Isabel"             "America/Santarem"
[197] "America/Santiago"                 "America/Santo_Domingo"
[199] "America/Sao_Paulo"                "America/Scoresbysund"
[201] "America/Shiprock"                 "America/Sitka"
[203] "America/St_Barthelemy"            "America/St_Johns"
[205] "America/St_Kitts"                 "America/St_Lucia"
[207] "America/St_Thomas"                "America/St_Vincent"
[209] "America/Swift_Current"            "America/Tegucigalpa"
[211] "America/Thule"                    "America/Thunder_Bay"
[213] "America/Tijuana"                  "America/Toronto"
[215] "America/Tortola"                  "America/Vancouver"
[217] "America/Virgin"                   "America/Whitehorse"
[219] "America/Winnipeg"                 "America/Yakutat"
[221] "America/Yellowknife"              "Antarctica/Casey"
[223] "Antarctica/Davis"                 "Antarctica/DumontDUrville"
[225] "Antarctica/Macquarie"             "Antarctica/Mawson"
[227] "Antarctica/McMurdo"               "Antarctica/Palmer"
[229] "Antarctica/Rothera"               "Antarctica/South_Pole"
[231] "Antarctica/Syowa"                 "Antarctica/Troll"
[233] "Antarctica/Vostok"                "Arctic/Longyearbyen"
[235] "Asia/Aden"                        "Asia/Almaty"
[237] "Asia/Amman"                       "Asia/Anadyr"
[239] "Asia/Aqtau"                       "Asia/Aqtobe"
[241] "Asia/Ashgabat"                    "Asia/Ashkhabad"
[243] "Asia/Atyrau"                      "Asia/Baghdad"
[245] "Asia/Bahrain"                     "Asia/Baku"
[247] "Asia/Bangkok"                     "Asia/Barnaul"
[249] "Asia/Beirut"                      "Asia/Bishkek"
[251] "Asia/Brunei"                      "Asia/Calcutta"
[253] "Asia/Chita"                       "Asia/Choibalsan"
[255] "Asia/Chongqing"                   "Asia/Chungking"
[257] "Asia/Colombo"                     "Asia/Dacca"
[259] "Asia/Damascus"                    "Asia/Dhaka"
[261] "Asia/Dili"                        "Asia/Dubai"
[263] "Asia/Dushanbe"                    "Asia/Famagusta"
[265] "Asia/Gaza"                        "Asia/Harbin"
[267] "Asia/Hebron"                      "Asia/Ho_Chi_Minh"
[269] "Asia/Hong_Kong"                   "Asia/Hovd"
[271] "Asia/Irkutsk"                     "Asia/Istanbul"
[273] "Asia/Jakarta"                     "Asia/Jayapura"
[275] "Asia/Jerusalem"                   "Asia/Kabul"
[277] "Asia/Kamchatka"                   "Asia/Karachi"
[279] "Asia/Kashgar"                     "Asia/Kathmandu"
[281] "Asia/Katmandu"                    "Asia/Khandyga"
[283] "Asia/Kolkata"                     "Asia/Krasnoyarsk"
[285] "Asia/Kuala_Lumpur"                "Asia/Kuching"
[287] "Asia/Kuwait"                      "Asia/Macao"
[289] "Asia/Macau"                       "Asia/Magadan"
[291] "Asia/Makassar"                    "Asia/Manila"
[293] "Asia/Muscat"                      "Asia/Nicosia"
[295] "Asia/Novokuznetsk"                "Asia/Novosibirsk"
[297] "Asia/Omsk"                        "Asia/Oral"
[299] "Asia/Phnom_Penh"                  "Asia/Pontianak"
[301] "Asia/Pyongyang"                   "Asia/Qatar"
[303] "Asia/Qostanay"                    "Asia/Qyzylorda"
[305] "Asia/Rangoon"                     "Asia/Riyadh"
[307] "Asia/Saigon"                      "Asia/Sakhalin"
[309] "Asia/Samarkand"                   "Asia/Seoul"
[311] "Asia/Shanghai"                    "Asia/Singapore"
[313] "Asia/Srednekolymsk"               "Asia/Taipei"
[315] "Asia/Tashkent"                    "Asia/Tbilisi"
[317] "Asia/Tehran"                      "Asia/Tel_Aviv"
[319] "Asia/Thimbu"                      "Asia/Thimphu"
[321] "Asia/Tokyo"                       "Asia/Tomsk"
[323] "Asia/Ujung_Pandang"               "Asia/Ulaanbaatar"
[325] "Asia/Ulan_Bator"                  "Asia/Urumqi"
[327] "Asia/Ust-Nera"                    "Asia/Vientiane"
[329] "Asia/Vladivostok"                 "Asia/Yakutsk"
[331] "Asia/Yangon"                      "Asia/Yekaterinburg"
[333] "Asia/Yerevan"                     "Atlantic/Azores"
[335] "Atlantic/Bermuda"                 "Atlantic/Canary"
[337] "Atlantic/Cape_Verde"              "Atlantic/Faeroe"
[339] "Atlantic/Faroe"                   "Atlantic/Jan_Mayen"
[341] "Atlantic/Madeira"                 "Atlantic/Reykjavik"
[343] "Atlantic/South_Georgia"           "Atlantic/St_Helena"
[345] "Atlantic/Stanley"                 "Australia/ACT"
[347] "Australia/Adelaide"               "Australia/Brisbane"
[349] "Australia/Broken_Hill"            "Australia/Canberra"
[351] "Australia/Currie"                 "Australia/Darwin"
[353] "Australia/Eucla"                  "Australia/Hobart"
[355] "Australia/LHI"                    "Australia/Lindeman"
[357] "Australia/Lord_Howe"              "Australia/Melbourne"
[359] "Australia/North"                  "Australia/NSW"
[361] "Australia/Perth"                  "Australia/Queensland"
[363] "Australia/South"                  "Australia/Sydney"
[365] "Australia/Tasmania"               "Australia/Victoria"
[367] "Australia/West"                   "Australia/Yancowinna"
[369] "Brazil/Acre"                      "Brazil/DeNoronha"
[371] "Brazil/East"                      "Brazil/West"
[373] "Canada/Atlantic"                  "Canada/Central"
[375] "Canada/Eastern"                   "Canada/Mountain"
[377] "Canada/Newfoundland"              "Canada/Pacific"
[379] "Canada/Saskatchewan"              "Canada/Yukon"
[381] "CET"                              "Chile/Continental"
[383] "Chile/EasterIsland"               "CST6CDT"
[385] "Cuba"                             "EET"
[387] "Egypt"                            "Eire"
[389] "EST"                              "EST5EDT"
[391] "Etc/GMT"                          "Etc/GMT-0"
[393] "Etc/GMT-1"                        "Etc/GMT-10"
[395] "Etc/GMT-11"                       "Etc/GMT-12"
[397] "Etc/GMT-13"                       "Etc/GMT-14"
[399] "Etc/GMT-2"                        "Etc/GMT-3"
[401] "Etc/GMT-4"                        "Etc/GMT-5"
[403] "Etc/GMT-6"                        "Etc/GMT-7"
[405] "Etc/GMT-8"                        "Etc/GMT-9"
[407] "Etc/GMT+0"                        "Etc/GMT+1"
[409] "Etc/GMT+10"                       "Etc/GMT+11"
[411] "Etc/GMT+12"                       "Etc/GMT+2"
[413] "Etc/GMT+3"                        "Etc/GMT+4"
[415] "Etc/GMT+5"                        "Etc/GMT+6"
[417] "Etc/GMT+7"                        "Etc/GMT+8"
[419] "Etc/GMT+9"                        "Etc/GMT0"
[421] "Etc/Greenwich"                    "Etc/UCT"
[423] "Etc/Universal"                    "Etc/UTC"
[425] "Etc/Zulu"                         "Europe/Amsterdam"
[427] "Europe/Andorra"                   "Europe/Astrakhan"
[429] "Europe/Athens"                    "Europe/Belfast"
[431] "Europe/Belgrade"                  "Europe/Berlin"
[433] "Europe/Bratislava"                "Europe/Brussels"
[435] "Europe/Bucharest"                 "Europe/Budapest"
[437] "Europe/Busingen"                  "Europe/Chisinau"
[439] "Europe/Copenhagen"                "Europe/Dublin"
[441] "Europe/Gibraltar"                 "Europe/Guernsey"
[443] "Europe/Helsinki"                  "Europe/Isle_of_Man"
[445] "Europe/Istanbul"                  "Europe/Jersey"
[447] "Europe/Kaliningrad"               "Europe/Kiev"
[449] "Europe/Kirov"                     "Europe/Kyiv"
[451] "Europe/Lisbon"                    "Europe/Ljubljana"
[453] "Europe/London"                    "Europe/Luxembourg"
[455] "Europe/Madrid"                    "Europe/Malta"
[457] "Europe/Mariehamn"                 "Europe/Minsk"
[459] "Europe/Monaco"                    "Europe/Moscow"
[461] "Europe/Nicosia"                   "Europe/Oslo"
[463] "Europe/Paris"                     "Europe/Podgorica"
[465] "Europe/Prague"                    "Europe/Riga"
[467] "Europe/Rome"                      "Europe/Samara"
[469] "Europe/San_Marino"                "Europe/Sarajevo"
[471] "Europe/Saratov"                   "Europe/Simferopol"
[473] "Europe/Skopje"                    "Europe/Sofia"
[475] "Europe/Stockholm"                 "Europe/Tallinn"
[477] "Europe/Tirane"                    "Europe/Tiraspol"
[479] "Europe/Ulyanovsk"                 "Europe/Uzhgorod"
[481] "Europe/Vaduz"                     "Europe/Vatican"
[483] "Europe/Vienna"                    "Europe/Vilnius"
[485] "Europe/Volgograd"                 "Europe/Warsaw"
[487] "Europe/Zagreb"                    "Europe/Zaporozhye"
[489] "Europe/Zurich"                    "Factory"
[491] "GB"                               "GB-Eire"
[493] "GMT"                              "GMT-0"
[495] "GMT+0"                            "GMT0"
[497] "Greenwich"                        "Hongkong"
[499] "HST"                              "Iceland"
[501] "Indian/Antananarivo"              "Indian/Chagos"
[503] "Indian/Christmas"                 "Indian/Cocos"
[505] "Indian/Comoro"                    "Indian/Kerguelen"
[507] "Indian/Mahe"                      "Indian/Maldives"
[509] "Indian/Mauritius"                 "Indian/Mayotte"
[511] "Indian/Reunion"                   "Iran"
[513] "Israel"                           "Jamaica"
[515] "Japan"                            "Kwajalein"
[517] "Libya"                            "MET"
[519] "Mexico/BajaNorte"                 "Mexico/BajaSur"
[521] "Mexico/General"                   "MST"
[523] "MST7MDT"                          "Navajo"
[525] "NZ"                               "NZ-CHAT"
[527] "Pacific/Apia"                     "Pacific/Auckland"
[529] "Pacific/Bougainville"             "Pacific/Chatham"
[531] "Pacific/Chuuk"                    "Pacific/Easter"
[533] "Pacific/Efate"                    "Pacific/Enderbury"
[535] "Pacific/Fakaofo"                  "Pacific/Fiji"
[537] "Pacific/Funafuti"                 "Pacific/Galapagos"
[539] "Pacific/Gambier"                  "Pacific/Guadalcanal"
[541] "Pacific/Guam"                     "Pacific/Honolulu"
[543] "Pacific/Johnston"                 "Pacific/Kanton"
[545] "Pacific/Kiritimati"               "Pacific/Kosrae"
[547] "Pacific/Kwajalein"                "Pacific/Majuro"
[549] "Pacific/Marquesas"                "Pacific/Midway"
[551] "Pacific/Nauru"                    "Pacific/Niue"
[553] "Pacific/Norfolk"                  "Pacific/Noumea"
[555] "Pacific/Pago_Pago"                "Pacific/Palau"
[557] "Pacific/Pitcairn"                 "Pacific/Pohnpei"
[559] "Pacific/Ponape"                   "Pacific/Port_Moresby"
[561] "Pacific/Rarotonga"                "Pacific/Saipan"
[563] "Pacific/Samoa"                    "Pacific/Tahiti"
[565] "Pacific/Tarawa"                   "Pacific/Tongatapu"
[567] "Pacific/Truk"                     "Pacific/Wake"
[569] "Pacific/Wallis"                   "Pacific/Yap"
[571] "Poland"                           "Portugal"
[573] "PRC"                              "PST8PDT"
[575] "ROC"                              "ROK"
[577] "Singapore"                        "Turkey"
[579] "UCT"                              "Universal"
[581] "US/Alaska"                        "US/Aleutian"
[583] "US/Arizona"                       "US/Central"
[585] "US/East-Indiana"                  "US/Eastern"
[587] "US/Hawaii"                        "US/Indiana-Starke"
[589] "US/Michigan"                      "US/Mountain"
[591] "US/Pacific"                       "US/Samoa"
[593] "UTC"                              "W-SU"
[595] "WET"                              "Zulu"
attr(,"Version")
[1] "2022f"

Legen wir die Zeitzone auf GMT (Greenwich Mean Time) fest:

ymd_hms("2011-06-04 12:00:00", tz="GMT")
[1] "2011-06-04 12:00:00 GMT"
ymd_hms("2017-01-31 20:11:59")
[1] "2017-01-31 20:11:59 UTC"
mdy_hm("01/31/2017 08:01")
[1] "2017-01-31 08:01:00 UTC"

7.1.1 Aus einzelnen Komponenten

Wenn die Zeitelemente auf mehrere Spalten verteilt sind, können die Funktionen [make_date()](https://lubridate.tidyverse.org/reference/make_datetime.html) und [make_datetime()](https://lubridate.tidyverse.org/reference/make_datetime.html) verwendet werden, um Datumsangaben bzw. Datums-Zeit-Angaben zu erstellen. Aktivieren wir das Package nycflights13, um die darin enthaltenen Daten zu Flugreisen zu verwenden.

year <- c(2021, 2022)
month <- c(1, 12)
day <- c(1, 31)

mina_datum <- data.frame(year, month, day)

mina_datum
  year month day
1 2021     1   1
2 2022    12  31

Nun erstellen wir ein Datum aus den Spalten year, month und day. Die neue Datumsspalte heißt my_date:

mina_datum$my_date <- make_date(mina_datum$year, mina_datum$month, mina_datum$day)

## Ergebnis anzeigen
mina_datum
  year month day    my_date
1 2021     1   1 2021-01-01
2 2022    12  31 2022-12-31

Jetzt wiederholen wir das mit einer Datums-Zeit-Angabe. Dafür werden Spalten mit hour, minute und seconds benötigt. Die neue Spalte wird my_datetime heißen:

year <- c(2021, 2022)
month <- c(1, 12)
day <- c(1, 31)
hour <- c(10, 12)
minute <- c(19, 24)
seconds <- c(11, 45)

mina_datum <- data.frame(year, month, day, hour, minute, seconds)

mina_datum$my_datetime <- make_datetime(mina_datum$year,
                                        mina_datum$month,
                                        mina_datum$day,
                                        mina_datum$hour,
                                        mina_datum$minute,
                                        mina_datum$seconds)

## Ergebnis anzeigen
mina_datum
  year month day hour minute seconds         my_datetime
1 2021     1   1   10     19      11 2021-01-01 10:19:11
2 2022    12  31   12     24      45 2022-12-31 12:24:45

7.2 Komponenten extrahieren

Mit den Extraktionsfunktionen von lubridate können Sie Komponenten aus Datums- und Datums-Zeit-Angaben extrahieren. Ihre Namen sind intuitiv, und Beispiele folgen hier:

Zunächst definieren wir eine Datums-Zeit-Angabe, nämlich 12:00:00 Uhr am 31. Dezember 2022:

datetime <- ymd_hms("2022-11-30 12:00:00")
datetime
[1] "2022-11-30 12:00:00 UTC"

Nun extrahieren wir eine Komponente nach der anderen:

year(datetime) # Jahr
[1] 2022
month(datetime, label = TRUE) # Monat als Name
[1] Nov
12 Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < ... < Dec
month(datetime) # Monat als Zahl
[1] 11
mday(datetime) # der Monat
[1] 30
week(datetime) # Kalenderwoche
[1] 48
hour(datetime) # die Stunde
[1] 12
minute(datetime) # die Minute
[1] 0
yday(datetime) # Tag des Jahres
[1] 334
wday(datetime, label = TRUE) # Wochentag als Name
[1] Wed
Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
wday(datetime) # Wochentag als Zahl
[1] 4

7.2.1 Runden

Datumsangaben lassen sich mit den Funktionen [floor_date()](https://lubridate.tidyverse.org/reference/round_date.html), [round_date()](https://lubridate.tidyverse.org/reference/round_date.html) und [ceiling_date()](https://lubridate.tidyverse.org/reference/round_date.html) runden.

7.2.2 Zeitelemente ändern

Sie können die Zeitelemente in Datums- und Datums-Zeit-Angaben ändern:

## Eine Datums-Zeit-Angabe erstellen:
datetime <- ymd_hms("2022-12-30 00:00:00")
datetime
[1] "2022-12-30 UTC"
## Das Jahr auf 2025 ändern
year(datetime) <- 2025
datetime
[1] "2025-12-30 UTC"
## Den Monat auf Januar ändern
month(datetime) <- 01
datetime
[1] "2025-01-30 UTC"
## Eine Stunde zur Stunde addieren
hour(datetime) <- hour(datetime) + 1
datetime
[1] "2025-01-30 01:00:00 UTC"

Mit der Funktion [update()](https://rdrr.io/r/stats/update.html) können Sie mehrere Datumskomponenten gleichzeitig ändern:

datetime <- update(datetime, year = 2030, month = 2, mday = 2, hour = 2)
datetime
[1] "2030-02-02 02:00:00 UTC"

Sind die Werte zu groß, werden sie in die nächste Einheit übertragen:

7.3 Durations, Perioden und Intervalle

Datumsangaben können zur Berechnung von Durations, Perioden und Intervallen verwendet werden.

  • Duration: Eine Duration ist eine Anzahl von Sekunden oder Tagen.
  • Periode: Eine Periode umfasst Wochen oder Monate.
  • Intervall: Ein Intervall hat einen Anfangs- und einen Endpunkt.

7.3.1 Durations

Wenn die Differenz zwischen zwei Datumsangaben berechnet wird, entsteht ein Objekt vom Typ difftime. Berechnen wir die Differenz zwischen dem 22.08.1991 und heute:

age <- today() - ymd("1991-08-22")
age
Time difference of 11402 days

Die Differenz lässt sich auch mit der Funktion [difftime()](https://rdrr.io/r/base/difftime.html) berechnen:

difftime(today(), ymd("1991-08-22"))
Time difference of 11402 days

Die Funktion as.duration() ist vorhersehbarer als difftime, da as.duration() alle Durations in Sekunden berechnet:

as.duration(age)
[1] "985132800s (~31.22 years)"

Mit den Duration-Funktionen können Sie die Anzahl der verstrichenen Sekunden berechnen. Es folgen Beispiele.

Wie viele Sekunden sind in 10 Sekunden enthalten?

dseconds(10)
[1] "10s"

Anzahl der Sekunden in 60 Minuten:

dminutes(60)
[1] "3600s (~1 hours)"

Anzahl der Sekunden in einer Stunde:

dhours(1)
[1] "3600s (~1 hours)"

Anzahl der Sekunden an einem Tag:

ddays(1)
[1] "86400s (~1 days)"

Anzahl der Sekunden in einer Woche:

dweeks(1)
[1] "604800s (~1 weeks)"

Anzahl der Sekunden in einem Jahr:

dyears(1)
[1] "31557600s (~1 years)"

Berechnungen auf Basis von Sekunden haben gewisse Vorteile. Vor allem wird die Berechnung genauer. Verwendet man beispielsweise Jahre als Zeitskala, kann man nicht 365 Tage zur Definition eines Jahres heranziehen, da die durchschnittliche Länge eines Jahres 365,25 Tage beträgt. Ebenso wenig können wir Monate als Zeitskala verwenden, da die Monate unterschiedlich lang sind. Eine Sekunde ist jedoch immer eine Sekunde (es sei denn, Sie nähern sich der Lichtgeschwindigkeit oder einem Ereignishorizont).

Sie können Durations addieren und subtrahieren:

dseconds(1) + dhours(1)
[1] "3601s (~1 hours)"

Sie können Durations zu Tagen addieren und von Tagen subtrahieren:

## Morgen
today() + ddays(1)
[1] "2022-11-10"
## Letztes Jahr
today() - dyears(1)
[1] "2021-11-08 18:00:00 UTC"

7.3.2 Perioden

Eine Periode ist eine Zeitspanne zwischen zwei Zeitpunkten. Eine Periode von 1 Stunde, 1 Tag oder 1 Monat wird wie folgt definiert:

hours(1)
[1] "1H 0M 0S"
days(1)
[1] "1d 0H 0M 0S"
months(1)
[1] "1m 0d 0H 0M 0S"

Sie können Perioden addieren, subtrahieren und multiplizieren:

hours(1) + days(1)
[1] "1d 1H 0M 0S"
hours(1) * 2
[1] "2H 0M 0S"

Sie können eine Periode zu einem bestehenden Datum oder einer Datums-Zeit-Angabe addieren:

ymd("2022-12-01") + ddays(1)
[1] "2022-12-02"
ymd("2022-12-01") + days(1)
[1] "2022-12-02"

7.3.3 Intervalle

Das Jahr 2015 hatte 365 Tage. Das Jahr 2016 hatte 366 Tage. Teilt man die Anzahl der Tage der Jahre 215 und 2016 durch 365, erhält man daher nicht dasselbe Ergebnis. Versuchen Sie es trotzdem, liefert lubridate Ihnen eine Schätzung. Um genauer zu wissen, wie viele Tage in einem bestimmten Zeitraum verstrichen sind, eignen sich Intervalle besser. Ein Intervall hat ein Anfangs- und ein Enddatum.

Intervalle werden mit der Syntax start %--% slut erstellt:

## Anzahl der Tage im Jahr 2015
my_interval_1 <- ymd("2015-01-01") %--% ymd("2016-01-01")
my_interval_1 / days(1)
[1] 365
## Anzahl der Tage im Jahr 2016
my_interval_2 <- ymd("2016-01-01") %--% ymd("2017-01-01")
my_interval_2 / days(1)
[1] 366

7.4 Ihre Zeitzone

Ihre aktuelle Zeitzone können Sie wie folgt überprüfen:

Sys.timezone()
[1] "Europe/Stockholm"