質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

738閲覧

Date 型でタイムゾーンを扱う方法

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

1クリップ

投稿2018/12/06 03:36

Date 型にタイムゾーンが保持されないため
日本時間の Date でデータベースから検索をかけようとすると UTC 0:00~24:00 で検索されてしまいます
毎回 datetime に変換して 9 時間引いた値を作ってデータベースクエリーに投げるみたいなことをする必要があるのでしょうか

はじめから DateTime 型を使うと不必要な時間情報を保持してしまうために
インスタンスを作成したときに当日0時にリセットするのを忘れたりしそうで…

このへんを簡単に扱う方法はないものでしょうか…

理想はデータベースに投げるとき以外は parse も出力も JST 0時基準で扱ってくれて
SQLクエリーにいれたときだけ UTC 時刻に変換してくれるとありがたいのですが…

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

begining_of_day ってメソッドで0時にできるみたいなので
とりあえず作るときにJSTゾーンをもったTimeを作ってbeginning_of_day でとりあえず対処することにします

ActiveSupport::Zone.new("Tokyo").parse('2018-12-07).beginning_of_day Time.now.to_zone("Tokyo").beginning_of_day

作るときにだけ注意しておけば出力は明示的にJSTになるし
タイムゾーン情報をもってるので ActiveRecord にほうりこめば勝手に to_s(:db) で UTC にしてくれて表示やデータベースでは意識しなくて使えそうです

もっと楽に JST 0 時をかけるメソッドチェーンがあればおしえてください

投稿2018/12/07 12:54

編集2018/12/07 12:55
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ruby

1# config/application.rb 2config.time_zone = 'Tokyo'

でRailsのTimezone設定をUTCからJSTに変更できます。

ついでにDBのdatetime型(MySQL)やtimestamp型(PostgreSQL)などは

ruby

1# config/application.rb 2config.active_record.default_timezone = :local

でシステムのローカルタイムゾーンとみなすことが出来ます。
PostgreSQLであるならtimestamptz型でタイムゾーンを保持したほうがいいでしょう。

投稿2018/12/06 04:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/06 05:39

config を変更するのって以降のリクエストには影響はでないのでしょうか? 他のページではJSTになっては困るページもあるかもしれないので…
退会済みユーザー

退会済みユーザー

2018/12/06 05:45 編集

config.time_zoneに関しては表示だけなので大した影響はないと思います。 config.active_record.default_timezoneは保存されているものをどう見なすかなので 影響が出るとしても以降のリクエストではなくすでにあるデータですかね。 そもそも複数のタイムゾーンが共存していないと都合が悪い設計から見直すべきだと思いますが...
退会済みユーザー

退会済みユーザー

2018/12/06 05:49

表示だけというのは別ページへのリクエストのタイムゾーンも変更されるということでしょうか 1つのRailsサイトにグローバルなものからJST限定のプロジェクトまでいろいろ動いているので 他のページにアクセスしたときに表示がJSTになっては困るかもしれないです
退会済みユーザー

退会済みユーザー

2018/12/06 05:54

グローバルなものがあるということでしたら どこかにタイムゾーンを保持していることと思いますので それを利用されてはいかがでしょうか?
退会済みユーザー

退会済みユーザー

2018/12/06 07:39

ユーザごとに任意でタイムゾーンを設定して表示するページもあるんですが 今のプロジェクトでは時刻はJST固定で扱いたいのです
退会済みユーザー

退会済みユーザー

2018/12/06 07:53

タイムゾーンを設定できるのであれば その「プロジェクト」内ではタイムゾーンの設定が必ずJSTになるようにすれば良いのでは?
退会済みユーザー

退会済みユーザー

2018/12/06 08:27

1度 config をJSTに変更するページを見た後 他のページへとんだときに config は戻っているんでしょうか JST に変更されたままなのでしょうか
退会済みユーザー

退会済みユーザー

2018/12/06 08:50

`Time.use_zone(current_user.time_zone, &block)`のような一時的な変更でしたら戻ると思いますが どのような変更かにもよると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問