Chuyển đổi kỷ nguyên UNIX thành đối tượng Ngày


118

Tôi đang vẽ và thực hiện các phép tính trên chuỗi thời gian được phân phối đồng đều. Dấu thời gian hiện được lưu trữ dưới dạng số nguyên đại diện cho số giây kể từ kỷ nguyên UNIX (ví dụ 1352068320:), nhưng Datecác đối tượng có vẻ thích hợp hơn để vẽ biểu đồ. Làm cách nào để chuyển đổi?

Tôi đã đọc ?Date, ?as.Date??epoch, nhưng dường như đã bỏ lỡ thông tin đó.

Câu trả lời:


220

Đi qua POSIXctvà bạn muốn đặt TZở đó - ở đây bạn thấy mặc định của tôi (Chicago):

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> 

Chỉnh sửa: Một vài năm sau, bây giờ chúng tôi có thể sử dụng gói bất kỳ lúc nào :

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

Lưu ý cách tất cả điều này hoạt động mà không có bất kỳ đối số định dạng hoặc nguồn gốc nào .


10
Tôi có dấu thời gian như thế nào 1415560016876. epochconverter.com biến điều này thành một ngày mà không có vấn đề gì. Mã của bạn trên mang lại cho tôi thứ như thế "46832-11-09 12:47:33 EDT"...
Hack-R

29
Hãy thử chia số đó cho 1000: as.POSIXct(1415560016876/1000, origin="1970-01-01")được "2014-11-09 13: 06: 56.875 CST" và bạn cần đảm bảo xem mong đợi là giây (đối với R) hay mili giây .
Dirk Eddelbuettel

2
@Shambho: Chỉ cần làm ngược lại và xem liệu bạn có đang ở cùng thứ tự cường độ hay không:print(as.numeric(Sys.time()))
Dirk Eddelbuettel

2
Nó luôn giống nhau: chia tỷ lệ những gì bạn có để nó đến với tỷ lệ tương tự như thời điểm hiện tại: print(as.numeric(Sys.time()), digits=16)với sáu chữ số là hệ thống Linux của tôi. Ngoài ra, bạn có thể chia cho 1000; điều này không cắt ngắn.
Dirk Eddelbuettel

1
Làm thế nào bạn sẽ chỉ trích xuất giờ địa phương từ biến R và kết xuất ngày tháng?
Stratix

17

Trong library(lubridate), các biểu diễn số của ngày và giờ được lưu dưới dạng số giây kể từ 1970-01-01 00:00:00 UTC, có thể được ép thành các ngày với as_datetime():

lubridate::as_datetime(1352068320)

[1] "2012-11-04 22:32:00 UTC"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.