Ubah waktu UNIX menjadi objek Tanggal

118

Saya merencanakan dan melakukan penghitungan pada deret waktu yang terdistribusi secara seragam. Stempel waktu saat ini disimpan sebagai bilangan bulat yang mewakili jumlah detik sejak zaman UNIX (misalnya 1352068320), tetapi Dateobjek tampaknya lebih sesuai untuk pembuatan plot. Bagaimana saya bisa melakukan konversi?

Saya telah membaca ?Date, ?as.Datedan ??epoch, tetapi sepertinya melewatkan informasi itu.

Andreas
sumber

Jawaban:

220

Pergi melalui POSIXctdan Anda ingin mengatur di TZsana - di sini Anda melihat default (Chicago) saya:

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> 

Sunting: Beberapa tahun kemudian, kami sekarang dapat menggunakan paket kapan saja :

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

Perhatikan bagaimana semua ini bekerja tanpa format atau argumen asal apa pun .

Dirk Eddelbuettel
sumber
10
Saya memiliki cap waktu seperti 1415560016876. epochconverter.com mengubahnya menjadi tanggal tanpa masalah. Kode Anda di atas memberi saya hal-hal seperti "46832-11-09 12:47:33 EDT"...
Hack-R
29
Coba bagi dengan 1000: as.POSIXct(1415560016876/1000, origin="1970-01-01")mendapatkan "2014-11-09 13: 06: 56.875 CST" dan Anda perlu memastikan apakah detik diharapkan (seperti untuk R) atau milidetik .
Dirk Eddelbuettel
2
@ Shambho: Lakukan saja yang sebaliknya dan lihat apakah Anda berada dalam urutan yang sama besarnya:print(as.numeric(Sys.time()))
Dirk Eddelbuettel
2
Itu selalu sama: skala apa yang Anda miliki sehingga mencapai skala yang sama dengan waktu saat ini: print(as.numeric(Sys.time()), digits=16)dengan enam digit adalah sistem Linux saya. Selain itu, Anda dapat membaginya dengan 1000; ini tidak memotong.
Dirk Eddelbuettel
1
Bagaimana Anda mengekstrak waktu lokal dari variabel R, dan membuang tanggal?
Stratix
17

Dalam library(lubridate), representasi numerik dari tanggal dan waktu yang disimpan sebagai jumlah detik sejak 1970-01-01 00:00:00 UTC, dapat digabungkan menjadi tanggal dengan as_datetime():

lubridate::as_datetime(1352068320)

[1] "2012-11-04 22:32:00 UTC"
Yuriy Barvinchenko
sumber