Rでの日付や時間の扱いはどうしても苦手で避けて通りがちなのですが、いつまでもそれではいけないと重い腰を上げてみました。
2011年12月05日19時00分を「201112051900」と表現するような文字列あって、このデータ形式を時間、そして、タイムゾーンをUTC(協定世界時)からJST(日本標準時)に変換したい…。
strptime()でデータ形式の変換は楽々できたものの、タイムゾーンの変更が全然ダメ。結局、UTCとJSTの時差は+9時間だからと60*60*9 = 32400秒 足し算するだけでお茶を濁してしまった…。
> x <- "201112051900"
> xx <- strptime(x, format = "%Y%m%d%H%M", tz="")
> xxx <- xx + 60*60*9
> xx
[1] "2011-12-05 19:00:00"
> xxx
[1] "2011-12-06 04:00:00 JST"
xxでタイムゾーンを設定していないと(tz = "")、パソコンのタイムゾーンが勝手に設定されます。
この場合、xxもxxxもタイムゾーンはJSTです。
ここから、タイムゾーンを変更してそれに対応した日時を表現してくれるようにしたいのだけど…。POSIXlt(), POSIXct()あたりが全然上手く動かない。今回は表示される日時だけ変更できればよかったので足し算したのですが、タイムゾーンの変換できるとやっぱり便利だろうなぁ。
strptime()ですが、formatも%Yと%yでは違います。
こちらにまとめられているのを引用します。
%Y 年(4桁)
%y 年(2桁)
%m 月(01-12)
%b 月( 1-12←日本語環境では)
%d 日(01-31)
%e 日( 1-31)
%H 時(00-23)
%M 分(00-59)
%S 秒(00-61)
「201112051900」もformant = "%y%m%d%H%M"とすると2020年11月12日 5時19分と解釈されてしまうわけです。
> strptime(x, format = "%y%m%d%H%M", tz="")
[1] "2020-11-12 05:19:00"