Дата и время
Задание 1
Используя функции базового пакета, выведите: а) текущую дату, б) текущие дату и время, в) таймзону локали сессии.
Задание 3
Преобразуйте в unix-таймстамп текущую дату.
as.POSIXct(Sys.Date(), origin = '1970-01-01')
## [1] "2022-02-12 UTC"
Задание 4
Преобразуйте в unix-таймстамп текущую дату и время.
Функция Sys.time()
возвращает объект классов POSIXct
и POSIXt
, т. е., количество дней и секунд c 1970-01-01, приведенные к особому формату. Поэтому можно просто преобразовать объект в число или просто снять класс (unclass()
).
# фиксируем текущее время и дату
my_dt <- Sys.time()
my_dt
## [1] "2022-02-12 22:57:12 UTC"
# преобразование в числовой тип
x <- as.numeric(my_dt)
x
## [1] 1644706633
# снятие класса
unclass(my_dt)
## [1] 1644706633
Задание 5
Преобразуйте unix-таймстамп, полученный в предыдущем задании, обратно в время и дату, в таймзоне UTC
.
as.POSIXct(x, origin = '1970-01-01', tz = 'UTC')
## [1] "2022-02-12 22:57:12 UTC"
Задание 6
Отформатируйте вывод функции Sys.time()
до вида dd/mm/YYYY
.
Задание 7
Превратите строку 9.13.2020
в объект даты класса POSIXct/POSIXlt. Сделайте это средствами базового R, а также средствами пакета lubridate
.
Задание 8
Превратите строку 9.13.2020 12:20:15
в объект даты и времени класса POSIXct/POSIXlt. Сделайте это средствами базового R, а также средствами пакета lubridate
.
Задание 9
Вычислите, какой день недели был 1 января 2000 года.
strftime('2000-01-01', format = '%A')
## [1] "Saturday"
Задание 10
Вычислите, какая дата была 100 дней назад от текущей даты.
Так как объект, возвращаемый Sys.Date() - это формат POSIXct, то есть количество дней с 1970-01-01, с ним можно совершать базовые операции сложения и вычитания.
Sys.Date() - 100
## [1] "2021-11-04"
Задание 12
Посчитайте, сколько прошло секунд до текущей даты с 2020-01-01.
Можно воспользоваться простым вычитанием дат, и количество дней умножить на 606024 (количество секунд в сутках). Попутно надо результат вычитания (класса difftime
) преобразовать в число.
as.numeric(Sys.Date() - as.Date('2020-01-01')) * 86400
## [1] 66787200
Точно так же можно воспользоваться базовой функцией difftime()
и указать единицу измерения секунды, результат будет класса difftime
.
Задание 13
Определите номер недели на даты '2020-01-01' и '2018-01-01'. Используйте для этого базовые функции, и, параллельно, функции пакета lubridate
.
Подсчет номера недели может зависеть от используемого стандарта. Так, в стандарте ISO 8601 первая неделя года -- если минимум четыре дня года приходится на эту неделю (год начался с понедельника по четверг). Если меньше трех дней, то эта неделя считается последней (53) неделей предыдущего года. В UK-формате есть нулевая неделя, а первая неделя -- это первая полная неделя, начинающаяся с понедельника. В 2020 году эти стандарты не совпадают.
Задание 14
Используя функции пакета lubridate
, найдите дату начала недели (понедельника) для даты '2020-01-17'.
lubridate::floor_date(as.Date('2020-01-17'), unit = 'week', week_start = 1)
## [1] "2020-01-13"