R Language
Классы времени (POSIXct и POSIXlt)
Поиск…
Вступление
R включает два класса времени - POSIXct и POSIXlt - см. ?DateTimeClasses
.
замечания
Ловушки
С помощью POSIXct в полночь будет отображаться только дата и часовой пояс, хотя все время сохраняется.
похожие темы
Специализированные пакеты
- lubridate
Форматирование и печать объектов даты и времени
# test date-time object options(digits.secs = 3) d = as.POSIXct("2016-08-30 14:18:30.58", tz = "UTC") format(d,"%S") # 00-61 Second as integer ## [1] "30" format(d,"%OS") # 00-60.99… Second as fractional ## [1] "30.579" format(d,"%M") # 00-59 Minute ## [1] "18" format(d,"%H") # 00-23 Hours ## [1] "14" format(d,"%I") # 01-12 Hours ## [1] "02" format(d,"%p") # AM/PM Indicator ## [1] "PM" format(d,"%z") # Signed offset ## [1] "+0000" format(d,"%Z") # Time Zone Abbreviation ## [1] "UTC"
Подробнее о строках формата см. Здесь ?strptime
, а также другие форматы.
Разбор строк в объектах с датой
Функции для синтаксического анализа строки в POSIXct и POSIXlt принимают аналогичные параметры и возвращают аналогичный результат, но существуют различия в том, как хранится дата-время; см. «Примечания».
as.POSIXct("11:38", # time string
format = "%H:%M") # formatting string
## [1] "2016-07-21 11:38:00 CDT"
strptime("11:38", # identical, but makes a POSIXlt object
format = "%H:%M")
## [1] "2016-07-21 11:38:00 CDT"
as.POSIXct("11 AM",
format = "%I %p")
## [1] "2016-07-21 11:00:00 CDT"
Обратите внимание, что дата и часовой пояс вменяются.
as.POSIXct("11:38:22", # time string without timezone
format = "%H:%M:%S",
tz = "America/New_York") # set time zone
## [1] "2016-07-21 11:38:22 EDT"
as.POSIXct("2016-07-21 00:00:00",
format = "%F %T") # shortcut tokens for "%Y-%m-%d" and "%H:%M:%S"
Подробнее о строках формата смотрите здесь. ?strptime
.
Заметки
Отсутствующие элементы
- Если элемент даты не указан, то используется текущая дата.
- Если элемент времени не указан, то используется с полуночи, то есть 0 с.
- Если часовой пояс не указан ни в строке, ни в параметре
tz
, используется местный часовой пояс.
Часовые пояса
- Принимаемые значения
tz
зависят от местоположения.-
CST
предоставляется"CST6CDT"
или"America/Chicago"
-
- Для поддерживаемых мест и часовых поясов используйте:
- В R:
OlsonNames()
- Кроме того, попробуйте в R:
system("cat $R_HOME/share/zoneinfo/zone.tab")
- В R:
- Эти местоположения предоставляются полномочным органом по присвоению номеров в Интернете (IANA)
Арифметика по времени
Чтобы добавить / вычесть время, используйте POSIXct, поскольку он хранит время в секундах
## adding/subtracting times - 60 seconds
as.POSIXct("2016-01-01") + 60
# [1] "2016-01-01 00:01:00 AEDT"
## adding 3 hours, 14 minutes, 15 seconds
as.POSIXct("2016-01-01") + ( (3 * 60 * 60) + (14 * 60) + 15)
# [1] "2016-01-01 03:14:15 AEDT"
Более формально, as.difftime
можно использовать для указания периодов времени для добавления к дате или объекту datetime. Например:
as.POSIXct("2016-01-01") +
as.difftime(3, units="hours") +
as.difftime(14, units="mins") +
as.difftime(15, units="secs")
# [1] "2016-01-01 03:14:15 AEDT"
Чтобы найти разницу между датами / временем, используйте difftime()
для разницы в секундах, минутах, часах, днях или неделях.
# using POSIXct objects
difftime(
as.POSIXct("2016-01-01 12:00:00"),
as.POSIXct("2016-01-01 11:59:59"),
unit = "secs")
# Time difference of 1 secs
Чтобы генерировать последовательности дат-времени, используйте seq.POSIXt()
или просто seq
.