Перетворити епоху UNIX в об’єкт Date


118

Я будую графіки та виконую обчислення за рівномірно розподіленими часовими рядами. В даний час часові позначки зберігаються у вигляді цілих чисел, що представляють кількість секунд після епохи UNIX (наприклад 1352068320), але Dateоб'єкти здаються більш підходящими для побудови графіків. Як я можу здійснити конверсію?

Я прочитав ?Date, ?as.Dateі ??epoch, але , схоже, пропустив цю інформацію.

Відповіді:


220

Перейдіть через POSIXctі ви хочете встановити TZтам - тут ви бачите мій (Чикаго) за замовчуванням:

R> val <- 1352068320
R> as.POSIXct(val, origin="1970-01-01")
[1] "2012-11-04 22:32:00 CST"
R> as.Date(as.POSIXct(val, origin="1970-01-01"))
[1] "2012-11-05" 
R> 

Редагувати: Через кілька років тепер ми можемо використовувати пакет у будь-який час :

R> library(anytime)
R> anytime(1352068320)
[1] "2012-11-04 16:32:00 CST"
R> anydate(1352068320)
[1] "2012-11-04"
R> 

Зауважте, як все це працює без аргументів формату чи джерела .


10
У мене є часові позначки, як 1415560016876. epochconverter.com без проблем перетворює це на дату. Ваш код вище дає мені такі речі, як "46832-11-09 12:47:33 EDT"...
Hack-R

29
Спробуйте розділити це на 1000: as.POSIXct(1415560016876/1000, origin="1970-01-01")отримує "2014-11-09 13: 06: 56.875 CST", і вам потрібно переконатися, чи очікуються секунди (як для R) або мілісекунд .
Дірк Еддельбуеттель

2
@Shambho: Просто зробіть реверс і подивіться, чи не в тому ж порядку ви:print(as.numeric(Sys.time()))
Дірк Еддельбюттель

2
Це завжди те саме: масштабуйте те, що ви маєте, щоб воно надходило в тій же шкалі , що і поточний час: print(as.numeric(Sys.time()), digits=16)шість цифр - це моя система Linux. Також можна розділити на 1000; це не врізається.
Дірк Еддельбюттель

1
Як би ви вивели лише місцевий час із змінної R та скинув дату?
Стратикс

17

У library(lubridate)числових поданнях дати та часу, збережених як кількість секунд з 1970-01-01 00:00:00 UTC, можна зв'язати з датами as_datetime():

lubridate::as_datetime(1352068320)

[1] "2012-11-04 22:32:00 UTC"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.