Классы POSIXt соответствуют стандарту POSIX. В R имеются два подкласса POSIXt: POSIXct и POSIXlt. Класс POSIXct представляет дату и время как знаковое количество секунд (включая доли секунды) с полночи по Гринвичу (UTC) 1 января 1970 года. Класс POSIXlt представляет дату и время как именованный список элементов для секунд (sec), минут (min), часов (hour), дня месяца (mday), месяца (mon), года (year), дня недели (wday), дня года (yday) и флага летнего времени (isdst).
Создание объектов класса POSIXct
Вы можете создать объект класса POSIXct из символьной строки, представляющей дату и время, с помощью функции as.POSIXct(). По умолчанию дата должна быть в формате “YYYY-mm-dd hh:mm:ss” или; часы, минуты и секунды необязательны.
> myDateTimeStr = "2013-12-19 10:17:07"
> myPOSIXct = as.POSIXct(myDateTimeStr)
> myPOSIXct
[1] "2013-12-19 10:17:07 PST"
> class(myPOSIXct)
[1] "POSIXct" "POSIXt"
> as.numeric(myPOSIXct)
[1] 1.387e+09
Если при этом с помощью необязательного аргумента tz не задан часовой пояс, его значение по умолчанию равно системному часовому поясу, который можно определить с помощью функции Sys.timezone():
> Sys.timezone()
[1] "PST"
Спецификация часового пояса - это атрибут объекта POSIXct.
> attributes(myPOSIXct)
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] ""
Если формат даты отличается от принятого по умолчанию, используйте дополнительный аргумент format:
> myDateTimeStr1 = "19-12-2003 10:17:07"
> myPOSIXct1 = as.POSIXct(myDateTimeStr1,format="%d-%m-%Y%H:%M:%S")
> myPOSIXct1
[1] "2003-12-19 10:17:07 PST"
Самый распространенный набор кодов для представления дат в стандарте POSIX представлен в таблице ниже. Описание этих кодов можно найти в файле помощи по функции strptime().
Код
|
Описание
|
Пример
|
Код
|
Описание
|
Пример
|
%a
|
сокращенный день недели
|
Mon
|
%A
|
Полный день недели
|
Monday
|
%b
|
аббревиатура месяца
|
Jan
|
%B
|
Полный месяц
|
January
|
%c
|
Дата и время в местном формате
|
%d
|
день месяца
|
01
| |
%H
|
Часы (24-часовой формат)
|
16
|
%I
|
Часы (12-часовой формат)
|
08
|
%j
|
День года
|
234
|
%m
|
Месяц
|
07
|
%M
|
Минуты
|
12
|
%p
|
Индикатор AM/PM
| |
%S
|
Секунды
|
35
|
%U
|
Номер недели в году (начинается с воскресенья)
| |
%w
|
День недели
|
1
|
%W
|
Номер недели в году (начинается с понедельника)
| |
%x
|
Дата в местном формате
|
%X
|
Время в местном формате
| ||
%y
|
Двухзначный год
|
91
|
%Y
|
Четырехзначный год
|
1991
|
%z
|
Полное название часового пояса
|
%Z
|
Аббревиатура часового пояса
|
PST
|
Поскольку объекты POSIXct хранят дату и время как количество секунд, прошедшее с некоторой начальной даты, вы всегда можете создать такой объект из числа.
> numDate = 0
> myPOSIXct2 = as.POSIXct(0, origin="1970-01-01")
> myPOSIXct2
[1] "1969-12-31 16:00:00 PST"
> as.numeric(myPOSIXct2)
[1] 0
Так как PST (Pacific Standard Time) на 8 часов отстает от GMT/UTC, дата и время показаны как 1969‐12‐31 16:00:00 PST, а не 1970‐01‐01 UTC.
Хотя числовое представление объекта по прежнему 0 (так как объекты POSIXct определяются как количество секунд с 1970‐01‐01 UTC), на отображение времени и выполнение арифметических операций с ним влияет спецификация часового пояса. Например, допустим я хочу прибавить 8 часов к myPOSIXct2.
> myPOSIXct3 = myPOSIXct2 + 8*60*60
> myPOSIXct3
[1] "1970-01-01 PST"
> as.numeric(myPOSIXct3)
[1] 28800
Во многих случаях удобнее задавать дату и время в GMT (UTC), чтобы избежать путаницы при выполнении различных операций.
> myPOSIXct4 = as.POSIXct(0, origin="1970-01-01", tz="UTC")
> myPOSIXct4
[1] "1970-01-01 UTC"
> as.numeric(myPOSIXct4)
[1] 0
Вы можете установить системный часовой пояс GMT (UTC) с помощью Sys.setenv(TZ="UTC"), чтобы он отображался в качестве умолчательного при вызове as.POSIXct().
Вы также можете создавать объекты POSIXct напрямую из числовых данных с помощью функции ISOdatetime(), задавая индивидуальные компоненты даты и времени, а также часовой пояс в символьном вде
> myPOSIXct5 = ISOdatetime(year=2013, month=12, day=19,
+
hour = 10, min = 17, sec = 7,
+
tz = "")
> class(myPOSIXct5)
[1] "POSIXct" "POSIXt"
> myPOSIXct5
[1] "2013-12-19 10:17:07 PST"
Комментариев нет:
Отправить комментарий