我有以下POSIXct日期陣列
>x
[1] "2003-12-01 UTC" "2003-12-02 UTC" "2003-12-03 UTC" "2003-12-04 UTC" "2003-12-05 UTC" "2003-12-08 UTC"
[7] "2003-12-09 UTC" "2003-12-10 UTC" "2003-12-11 UTC" "2003-12-12 UTC"
其結構為:
str(x)
POSIXct[1:10], format: "2003-12-01" "2003-12-02" "2003-12-03" "2003-12-04" "2003-12-05" "2003-12-08" "2003-12-09 ..."
無論如何,當我使用 時dput,我獲得:
structure(c(1070236800, 1070323200, 1070409600, 1070496000, 1070582400,
1070841600, 1070928000, 1071014400, 1071100800, 1071187200), class = c("POSIXct",
"POSIXt"), tzone = "UTC")
uj5u.com熱心網友回復:
POSIXct存盤為一個數值,表示自 1970 年 1 月 1 日 UTC 午夜以來的秒數。請注意,如果我們structure手動寫入相同的數值并將數值設定為 0,我們會得到:
structure(0, class = c("POSIXct", "POSIXt"), tzone = "UTC")
#> [1] "1970-01-01 UTC"
我們可以確認 POSIXct 存盤為雙精度浮點數
x <- Sys.time()
x
#> [1] "2022-11-08 11:33:36 GMT"
class(x)
#> [1] "POSIXct" "POSIXt"
typeof(x)
#> [1] "double"
它存盤為數字的原因是因為我們需要能夠在算術上處理日期時間。如果我們從 POSIXct 物件中減去數字,我們就是在減去秒數:
x - 3600
#> [1] "2022-11-08 10:33:36 GMT"
如果它被存盤為字串,那么任何時候我們想要對日期時間執行計算或繪制它們,我們都必須將字串決議為數值,進行計算,然后重寫字串。這顯然比使用特殊列印方法將數字表示為日期時間的底層數字表示效率低得多。
uj5u.com熱心網友回復:
POSIXct使用關聯的時區轉換日期時間。您看到的數字,即1070236800從 1970 年 1 月 1 日開始的秒數,如果您在此之前有一個日期,您會注意到它是負數。例如,
date <- as.POSIXct("1969-12-31",tz="UTC",format="%Y-%m-%d")
dput(date)
給
structure(-86400, class = c("POSIXct", "POSIXt"), tzone = "UTC")
由于 1969 年在 1970 年之前,因此秒數為負數,而 86400 的原因是我選擇了 1970 年 1 月 1 日之前的 1 天,一天有 86400 秒
所以你會注意到,如果我從你的第一個元素中輸入秒數并轉換它,它會給出你最初擁有的日期
as.POSIXct(1070236800, origin = "1970-01-01", tz = "UTC")
產量
[1] "2003-12-01 UTC"
以這種方式存盤它可以加快計算、處理和轉換為其他格式的速度
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529427.html
標籤:r日期
上一篇:在R中制作一個統計資料框
