hack のためのネタ帳, etc,,,

現在時刻

Sys.Date() # Date
Sys.time() # POSIXct 
どうも秒未満が保持されてない模様。

パース

as.POSIXct("2019-01-02 03:04:05.67890+0900")
as.POSIXlt("2019-01-02 03:04:05.67890+0900")

フォーマット

strftime() や format() を用いると strftime (3) 互換のフォーマットが使える。
strftime(Sys.time(),"%F %T %z")
format(Sys.time(),"%F %T %z")
ただし、秒以下に対応してないため %N は使えない模様。

時間成分の抽出

POSIXlt に型変換しておくと、名前付きのリスト的に sec, min, hour, mday, mon, year, wday, yday, isdst, zone, gmtoff が使える。
これは C 言語の struct tm そのままかな?
as.POSIXlt("2019-01-02 03:04:05.67890+0900")$year

ただし、POSIXlt は timezone の扱いがおかしい。
> format(as.POSIXlt("2019-01-02 03:04:05.67890+0900"), "%z")
[1] "+0000"
> as.POSIXlt("2019-01-02 03:04:05.67890+0900")$gmtoff
[1] NA
> format(as.POSIXlt("2019-01-02 03:04:05.67890+0900"), "%Z")
[1] "JST"
> as.POSIXlt("2019-01-02 03:04:05.67890+0900")$zone
[1] "JST"
見てのように、%Z と zone はちゃんと JST になっているが、%z と gmtoff が空になっている。

これは POSIXlt と言うよりも as.POSIXlt() による文字列からのパースの問題の模様。
> format(as.POSIXlt(as.POSIXct("2019-01-02 03:04:05.67890+0900")), "%z")
[1] "+0900"
> as.POSIXlt(as.POSIXct("2019-01-02 03:04:05.67890+0900"))$gmtoff
[1] 32400
以下の環境は軒並みこの状態だった。
  • Microsoft R version 3.5.1 (2018-07-02)
  • win32 x86_64版 GNU R version 3.5.2 (2018-12-20)
  • Cygwin64版 GNU R version 3.6.0 (2019-04-26)

参考になるページ等

関連

タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です