2015-04-08 127 views
3

進行日誌記錄,如何能的R腳本獲取當前日期和時間,在UTC時區,爲ISO 8601字符串格式爲:在ISO當前時間8601格式

2015-12-31T14:26:56.600374+00:00 

as.POSIXlt似乎是溶液,並且該文檔聲稱,它接受的格式參數,但我不能使這項工作(R上版本3.1.3):

> as.POSIXlt(Sys.time(), "UTC", "%Y-%m-%dT%H:%M:%S") 
[1] "2015-04-08 14:37:58 UTC" 
> as.POSIXlt(Sys.time(), tz="UTC", format="%Y-%m-%dT%H:%M:%S") 
[1] "2015-04-08 14:38:02 UTC" 
> as.POSIXct(Sys.time(), tz="UTC", format="%Y-%m-%dT%H:%M:%S") 
[1] "2015-04-08 11:38:22 BRT" 

回答

7

as.POSIXlt(和as.POSIXct)是用於輸入。輸出使用formatstrftime。詳情請參閱的strftime的格式字符串:

tm <- as.POSIXlt(Sys.time(), "UTC", "%Y-%m-%dT%H:%M:%S") 
strftime(tm , "%Y-%m-%dT%H:%M:%S%z") 
#[1] "2015-04-08T15:11:22+0000" 

我不認爲在時區輸出的結腸是ISO 8601格式的要求,但我可能是錯在這一點上。幫助頁面顯示標準是POSIX 1003.1。如果需要,可能需要用正則表達式替換冒號。

看着http://dotat.at/tmp/ISO_8601-2004_E.pdf後,我看到有處於「基本」格式沒有冒號」時區代表,但有一個在‘擴展格式’。

+0

哦,有道理儘管如此,「格式化」的'as.POSIXlt'似乎並不有所作爲改變它(3)參數,即使去除時間部分,沒有改變輸出,這似乎工作:'strftime(as.POSIXlt(Sys.time(),「UTC」),「%Y-%m-%dT%H:%M:%S %z「)'。 –

+2

對。你的代碼是我做的,除了你省略了中間變量的創建。當你使用未命名的參數時,我們使用了位置匹配,所以當我們給它一個數值時,它將該格式與'as.POSIXlt.POSIXct'函數的「...」參數相匹配。無論如何,它基本上忽略了它。它不會傳遞給內部函數。 –

0

parsedate識別並分析各種格式的日期包括所有ISO 8601格式:。

format_iso_8601(Sys.time()) 
# [1] "2017-09-01T10:59:22+00:00"