2

strptime 解析で非常に奇妙な動作が発生します。

これは、Windows マシンでの私の R セッションです。

> R.Version()$version.string
[1] "R version 2.15.2 (2012-10-26)"
> a <- ( strptime(  "29-MAR-13 02.26.53.000000000 AM" , "%d-%B-%y %I.%M.%OS %p" ) )
> str(a)
 POSIXlt[1:1], format: "2013-03-29 02:26:53"
> # convert to double: doesn't work
> as.double(a)
[1] NA
> b <- ( strptime(  "29-MAR-13 04.26.53.000000000 AM" , "%d-%B-%y %I.%M.%OS %p" ) )
> #same as `a`, but another hour
> str(b)
 POSIXlt[1:1], format: "2013-03-29 04:26:53"
> #convert to double: works
> as.double(b)
[1] 1364520413
>  #WTF ???

R のマイナー バージョンが異なる別のマシン (Linux) で同じコードをテストしました。どちらの場合も、コードは期待どおりに機能しました。

> R.Version()$version.string
[1] "R version 2.15.1 (2012-06-22)"
> a <- ( strptime(  "29-MAR-13 02.26.53.000000000 AM" , "%d-%B-%y %I.%M.%OS %p" ) )
> str(a)
 POSIXlt[1:1], format: "2013-03-29 02:26:53"
> # convert to double: WORKS!
>  as.double(a)
[1] 1364513213
> b <- ( strptime(  "29-MAR-13 04.26.53.000000000 AM" , "%d-%B-%y %I.%M.%OS %p" ) )
> #same as `a`, but another hour
> str(b)
 POSIXlt[1:1], format: "2013-03-29 04:26:53"
>  #convert to double: works
> as.double(b)
[1] 1364520413
>

誰かが私に何が問題なのか教えてもらえますか? R でバグを見つけましたか?

4

1 に答える 1

3

あなたはイスラエルにいますか?グーグルで「夏時間「3 月 29 日」」を検索すると、2013 年にイスラエルで DST が 3 月 29 日に開始されたことがわかります 。テストした 2 台のコンピューター間のゾーン設定は、1 台がイスラエルのタイム ゾーンに設定されていて、もう 1 台がそうでない場合に、これを確実に説明できます。これを使用して確認できtz="GMT"ます...

PS : 私はあなたのプロフィールを見て、あなたが確かにイスラエルにいることを知りました. 最初に回答を投稿する前に、私は見ませんでした!

PPS :日時変換に関するクエリの大部分は、タイムゾーン、特に夏時間の問題であることが判明しました。これが、そもそも私を答えに導いたものです。

于 2013-07-30T15:06:22.700 に答える