⌚
DateTimeで日本時間を保存したい。
💡Tips
DateTime.now().toIso8601String();
を使うと9時間ぐらい時間がズレるらしい?
日本時間を取得したいんですよね。
DateTime.now().toUtc().toIso8601String();
にすればできるらしい?
toIso8601Stringをつけるとどうなる?
AIに聞いてみた!
DateTime.now().toUtc().toIso8601String()を使用すると、現在の日時をUTC(協定世界時)でISO 8601形式の文字列に変換します。これにより、タイムゾーンが異なる場所でも同じ時間を表現できます。
サンプルコード:
void main() {
final jaUtc = DateTime.now().toUtc().toIso8601String();
final utc = DateTime.now().toIso8601String();
print('日本時間: $jaUtc');
print('ISO 8601形式の文字列に変換: $utc');
}
実行結果:
時間の知識がないので、わからないがその時によって誤差が出てくることがあるらしい?
今回、日本時間で現在時刻を取得して、RDBにデータを保存する方法を調べていたので試してみた。
Supabaseを今回使ってるのでデータ型も調べてみた。今回は、Timestamp
でやってた気がします。
データ型 | 説明 |
---|---|
Bool | Boolean値に適したデータ型です。例えば、ユーザーがニュースレターの受信を許可しているかどうかをチェックするallowed_newsletters というカラムに適しています。 |
Date | 時間を含まない日付値を保持します。これに適したカラムの例はbirth day です。 |
Float4 | 単精度浮動小数点数です。範囲は±1.18×10−38から±3.4×1038です。 |
Float8 | 倍精度浮動小数点数で、範囲は±2.23×10−308から±1.80×10308です。お金のような高精度が必要な値に使用することができます。 |
Int2 | -32,768から32,767までの数値を含むことができます。このデータ型に適したカラムの例はhuman_bones です。人体の骨の数がこの数を超えることはないためです。 |
Int4 | -2,147,483,648から+2,147,483,647までの数値を含むことができます。このデータ型に適したカラムの例はauctions_per_day です。1日は84,600秒であり、オークションのプロセスは同期的で新しい価格の処理に少なくとも1秒かかるため、2,147,483,648のオークションを持つことはほぼ不可能です。 |
Int8 | -9,223,372,036,854,775,808から+9,223,372,036,854,775,807までの数値を含むことができます。このデータ型に適したカラムの例はcorona_cases_per_day です。世界の総人口がこの数以下であり、たとえ全員が同じ日にコロナに感染したとしても、このデータ型でまだ収容できます。 |
Json | jsonデータを保持します。再利用が必要なjson入力を保存するのに適しています。 |
Jsonb | jsonを保存するためのより良い方法です。jsonデータのインデックスをサポートするjsonの分解バイナリ形式です。jsonのカラムはjsonbにも適しています。したがって、jsonbの使用が推奨されます。 |
Text | 上限を定義せずに文字列を保存するために使用されます。 |
Time | 1日の時間のみを取ります。start_time やstop_time などのカラムに役立つかもしれません。 |
Timestamp | 日付と時間を保存します。created_time やmodified_time などのデータに役立つかもしれません。 |
Timestamptz | タイムゾーン付きの日付と時間を保存し、UTC時間を使用します。将来の時間を設定したい場合や、タイムゾーンが含まれているため、変動の機会が許されないようなデータを保持する場合に役立つかもしれません。 |
Timetz | タイムゾーン付きの1日の時間のみを取ります。 |
Uuid | 特定のデータベースエンティティのためのユニバーサル一意識別子です。大学の学籍番号や顧客IDなどのデータに適しています。 |
Varchar | 文字列を保存するために使用され、上限を定義することができます。 |
まとめ
今回は、Dartで日本時間の取得をして、PostgreSQLに保存する方法の調査をしていたときの、メモがわりに記事を書いてみました。時間を扱うロジックを考えるのは難しいな〜と悩まされました💦
参考にした記事:
Discussion