假設我有幾個時間戳以Unix Epoch(1970-01-01 00:00:00Z)中的整數(秒)給出。將時間秒從時間轉換爲本地時間
如何將它們轉換爲當地時區的正確日期時間?我一直在尋找as.POSIXct
幫助頁面以及SO上的相關問題。 UTC很容易做到,但出於某種原因,我似乎無法直接爲當地時區或另一個時區(順便說一下,我恰好在「America/Los_Angeles」或「PST5PDT」中成爲「PST或」PDT「,具體取決於是否在指定的時間節約時間;因此我通常會指定基於位置的時區,而不是」PST「或」PDT「,這些都是非常有挑戰性的)
實施例:
z <- c(1360527317,1363019665)
快速驗證在Perl:
echo -n 1360527317,1363019665 | perl -ne '
use POSIX /strftime/;
$fmt = "%Y-%m-%d %H:%M:%S";
for (split /,/) {
$loc=strftime("$fmt %Z", localtime($_));
$gmt=strftime("$fmt GMT", gmtime($_));
print "$_: $loc $gmt\n";
}'
# gives:
1360527317: 2013-02-10 12:15:17 PST 2013-02-10 20:15:17 GMT
1363019665: 2013-03-11 09:34:25 PDT 2013-03-11 16:34:25 GMT
首先,顯而易見的(在UTC):
as.POSIXct(z, origin='1970-01-01', tz='GMT')
# --> [1] "2013-02-10 20:15:17 GMT" "2013-03-11 16:34:25 GMT"
這裏有事情,我試圖不工作:
as.POSIXct(z, origin='1970-01-01')
# --> (wrong) [1] "2013-02-10 20:15:17 PST" "2013-03-11 17:34:25 PDT"
as.POSIXct(z, origin='1970-01-01 00:00:00 Z')
# --> (wrong) [1] "2013-02-10 20:15:17 PST" "2013-03-11 17:34:25 PDT"
as.POSIXct(z, origin='1970-01-01', tz='America/Los_Angeles')
# --> (wrong) [1] "2013-02-10 20:15:17 PST" "2013-03-11 17:34:25 PDT"
在我束手無策,這裏的東西,給我的正確的結果:
now=Sys.time(); now+(z-unclass(now))
# --> [1] "2013-02-10 12:15:17 PST" "2013-03-11 09:34:25 PDT"
而且順便說一句我的系統上:
now=Sys.time()
now
# --> [1] "2013-03-13 18:26:05 PDT"
unclass(now)
# --> [1] 1363224365
所以看來我的設置和本地時區是正確的。
任何想法我做錯了行不行以上?
在此期間,我將使用下面的技巧,希望對大家有用別人:
localtime <- function(t) {
now = Sys.time();
return(now+(unclass(t)-unclass(now)))
}
# quick test:
localtime(Sys.time())
# --> [1] "2013-03-13 18:33:40 PDT"
localtime(z)
# --> [1] "2013-02-10 12:15:17 PST" "2013-03-11 09:34:25 PDT"
輝煌。作品!但是,它在我看來,文檔是錯誤的。看到'as.POSIXct'的例子。 – 2013-03-14 01:39:41
此外,「origin = as.Date('1970-01-01')」和「origin ='1970-01-01'」,甚至非常具體的「origin ='1970- 01-01 00:00:00Z'並沒有激發我對內部深處內部的信心...... – 2013-03-15 01:30:21
@PierreD,這是一個錯誤([LINK](https://bugs.r- project.org/bugzilla3/show_bug.cgi?id=14973))。它已在R-devel中修復。 – GSee 2013-03-29 19:06:41