แปลง UNIX epoch เป็นวัตถุ 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) หรือมิลลิวินาที
Dirk Eddelbuettel

2
@Shambho: ทำย้อนกลับและดูว่าคุณอยู่ในลำดับความสำคัญเดียวกันหรือไม่:print(as.numeric(Sys.time()))
Dirk Eddelbuettel

2
มันเหมือนกันเสมอ: ปรับขนาดสิ่งที่คุณต้องให้มันมาถึงในระดับเดียวกับเวลาปัจจุบัน: print(as.numeric(Sys.time()), digits=16)ด้วยตัวเลขหกหลักคือสิ่งที่ระบบ Linux ของฉัน นอกจากนี้คุณสามารถหารด้วย 1,000 สิ่งนี้ไม่ได้ตัดทอน
Dirk Eddelbuettel

1
คุณจะแยกเฉพาะเวลาท้องถิ่นจากตัวแปร R และถ่ายโอนข้อมูลวันที่ได้อย่างไร
Stratix

17

ในการlibrary(lubridate)แสดงตัวเลขของวันที่และเวลาที่บันทึกเป็นจำนวนวินาทีตั้งแต่ 1970-01-01 00:00:00 UTC สามารถรวมเป็นวันที่ด้วยas_datetime():

lubridate::as_datetime(1352068320)

[1] "2012-11-04 22:32:00 UTC"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.