kachick / times_kachick

`#times_kachick channel in chat` as a public repository. Personal Note and TODOs
https://github.com/kachick/times_kachick/issues?q=is%3Aissue+is%3Aclosed
6 stars 0 forks source link

2023-07-09 - ActiveSupport が生やす Time#in_time_zone に頼らず Ruby で UTC/JST 変換やりたい時には Time#localtime を使う #229

Closed kachick closed 1 year ago

kachick commented 1 year ago

頻繁に使っていようと頻繁に忘れるというか正確に覚えておけない物の一つが日時操作で、JSTとUTC変換する時にUTCと比較して足すんだっけ引くんだっけみたいなのがよくわからなくなる そういうのを確認しようとirbを立ち上げると、今度は Time の操作を忘れている まぁすぐ出てくるやろとぐぐると、 in_time_zone を使えみたいなのばっか上位に来る。それはね、 Rails の機能であって Ruby が生やしている訳では無いの

ということで今更メモっておくけれど、 Time#localtime なら require 'time' すら無しで使える。 ただ JST やら Asia/Tokyo みたいな人間に優しい文字列での Zone 指定は出来ないので、自分で '+09:00' と書く必要がある。無指定でもマシンの地方時にはなるけれど、自分のPCでちょっと触る以外で使うのは不安だ

結局 + なのか - なのかは毎回脳みその外から引っ張ってこないと解決出来ない話なのかなーと思ってたら、ミリタリータイムゾーンという1文字指定で I を使えばJST指定と同じになる様子。 こっちの方が覚えにくそうだなーと最初感じたけれど、 I は India から取っているらしいので案外想起しやすいかも。ただ IST とはまた違うところが厄介だ。

utc = Time.utc(2006, 1, 2, 15, 4, 5)
#=> 2006-01-02 15:04:05 UTC
utc.localtime
#=> 2006-01-03 00:04:05 +0900
utc.localtime('+09:00')
#=> 2006-01-03 00:04:05 +0900
utc.localtime('Asia/Tokyo')
# => (irb):6:in `localtime': "+HH:MM", "-HH:MM", "UTC" or "A".."I","K".."Z" expected for utc_offset: Asia/Tokyo (ArgumentError)
utc.localtime('JST')
# => (irb):6:in `localtime': "+HH:MM", "-HH:MM", "UTC" or "A".."I","K".."Z" expected for utc_offset: Asia/Tokyo (ArgumentError)
utc.localtime('I')
#=> 2006-01-03 00:04:05 +0900
utc.localtime('-04:00') # パタゴニア
#=> 2006-01-02 11:04:05 -0400

余談だけど、こういう時に何の日時サンプルが良いんだろと探しに行っては特に代表的なのが見つからず go のを使ったりしてしまう。 個人的にドラえもんの生年月日が好きなんだけど、あれ時間までは明記されてないんだよな・・・