2013-04-05 10 views
8

でISO8601の日付と時刻の形式 - 我々はRに次のフォーマットを解析している。解析これは迅速でなければなりませんR

2013-04-05T07:49:54から07:00

私の現在のアプローチがあります

require(stringr) 
timenoT <- str_replace_all("2013-04-05T07:49:54-07:00", "T", " ") 
timep <- strptime(timenoT, "%Y-%m-%d %H:%M:%S%z", tz="UTC") 

ただし、NAとなります。

+1

'%z'は、' hh:mm'ではなく、 'hhmm'の形式で、時間単位の符号付きオフセットです。 –

+0

":"を置き換えるには最適な解決策がありますか? – Rico

答えて

12

%zは、hhmmではなく、hh:mmの形式で、時間単位の符号付きオフセットです。最後の:を削除する方法の1つがあります。

newstring <- gsub("(.*).(..)$","\\1\\2","2013-04-05T07:49:54-07:00") 
(timep <- strptime(newstring, "%Y-%m-%dT%H:%M:%S%z", tz="UTC")) 
# [1] "2013-04-05 14:49:54 UTC" 

はまた、あなたが"T"を削除する必要がないことに注意してください。

+1

それはあまりにも一般的なパターンのように思えます。私はこれのようなものは過小修正する傾向が少ないと思うでしょう: 'gsub("([+ - ] \\ d \\ d)(:) "、" \\ 1 "、argvec)' –

-1

strptime("2013-04-05 07:49:54-07:00", "%Y-%m-%d %H:%M:%S", tz="UTC")2013-04-05 07:49:54 UTC

を与えるあなたは、文字列の置き換えをしないでください

timep <- strptime(timenoT, "%Y-%m-%d %H:%M:%S", tz="UTC") 
+0

時刻が7:49:54 UTCでないため、間違っています。UTCより7時間遅れています。したがって、あなたがUTCで表現すると、7:49.54より7時間早くなります。 –

2

を試してみてください。

NAはちょうど全体が機能しなかったことを意味するので、それを作品あなたの表現を構築するために実行します。私は完全には理解していなかった理由のために、また

R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%d") 
[1] "2013-04-05" 
R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%dT%H:%M") 
[1] "2013-04-05 07:49:00" 
R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%dT%H:%M:%S") 
[1] "2013-04-05 07:49:54" 
R> 

を - しかし、おそらくそれを基礎となるCライブラリ関数に存在します%zは、出力でのみ動作し、入力ではありません。だからあなたのNAは、おそらく%zのあなたの使用から来るでしょう。

+0

'%z'は入力時に機能しますが、形式が異なります。 '%Z'は出力にのみ作用します。 –

+0

ああ、ありがとう、ありがとう。私の解決策はまだ正規表現やHadleyパッケージなしで得られます。私たちの定義によって、私は勝ちます。 –

+0

それはすべてのことを行い、追加ボーナスとして、間違った答えを提供します。 :) –