このエントリーをはてなブックマークに追加

2016年12月15日木曜日

はじめの一歩 -Rails 時間・タイムゾーン編- その4

どうも、はじめです。

前回はさまざまな日時の取得方法について書いてみました。
「はじめの一歩 -Rails 時間・タイムゾーン編- その3」
今回はいくつかのタイムゾーンの紹介や
任意のタイムゾーンでの出力方法について書いてみます。

はじめに、

タイムゾーンの基準となる「UTC(協定世界時)」というものがあり、
タイムゾーンを表示した際に表示される「+0900」とは、
この「UTC」からの時差になります。

それではいくつかタイムゾーンを紹介していきます。

UTC (+0000)

こちらは先程も書いたとおり「協定世界時」と言って
世界の時間の基準となるものです。
スペインやポルトガルの時間を表示したい際にも用いられるそうです。
また、タイムゾーンを指定しなかった場合に
デフォルトで指定されているのも「UTC」になります。

JTC (+0900)

こちらは日本のタイムゾーンになります。
または、Asia/Tokyoと指定する事もできます。

KST (+0900)

こちらは韓国の標準時になります。
または、Asia/Seoulと指定する事もできます。

CST (+0600)

こちらはアメリカ・カナダ(中部標準時)になります。
または、America/Chicagoと指定する事もできます。

ちなみに、

中国の場合は文字列(UTCやJSTのようなもの)はなく、
+0800と指定するのが良さそうです。


任意のタイムゾーンでの取得

次に任意のタイムゾーンで時間を取得したい場合ですが、
文字列を指定する場合とUTCとの時差(+0900)を指定する場合があります。

文字列での指定はこのように行います。
Time.parse('2016-12-15 19:28:18 CST')
# => 2016-12-15 19:28:18 -0600

parseの場合はUTCからの時差で指定することもできます。
Time.parse('2016-12-15 19:28:18 -0600')
# => 2016-12-15 19:28:18 -0600

一時的にタイムゾーンを変更して取得を行いたい場合は、
以下のようにすることも可能です。
SYSTEM_TZ = ENV[‘TZ’]
ENV[’TZ’] => ‘CST’
Time.local('2016,12,15,19,28,18')
# => 2016-12-15 19:28:18 +0600
EVN[‘TZ’] = SYSTEM_TZ


任意のタイムゾーンでの表示

時刻の取得後に任意のタイムゾーンで表示をしたい場合は、
以下のように指定をすることで変更が可能となります。
time = Time.zone.now
# => Thu, 15 Dec 2016 19:28:18 JST +09:00
time.in_time_zone('UTC')
# => Thu, 15 Dec 2016 10:28:18 UTC +00:00

またはこのように指定することもできます。
time.in_time_zone('America/Chicago')
# => Thu, 15 Dec 2016 04:28:18 CST -06:00


最後に

UTCやJSTなどの文字列でタイムゾーンを指定する場合、
想定しているものとは違っていたり、
parseで指定したとしても反映されない場合等がありました。
明確に分かっているものならともかく確証がないものの場合は、
[Asia/Tkyo]のような文字列を使用するか[+0900]と時差指定の方が確実ではないかと思いました。

次回

月の始めや終わり、週の始めや終わりの取得方法を書いていきたいと思います。

0 件のコメント:

コメントを投稿