🕐

[Flutter]DateTime型を用いた時間の扱い方チートシート

に公開

事前知識

タイムゾーン:JST/UTC

地球上で同一の標準時を採用している地域の集合のこと。
DateTime型は日本標準時(JST)と協定世界時(UTC)の両方を扱うことができるためどちらの形式で格納されているかに注意する。
DateTime.now()で取得できるのはJST。

ISO8601とは

ISOで定められた日付と時間の表記に関する国際規格

  • 日付と時刻を「T」で区切る
  • UTCは秒の後に「Z」を付ける
  • UTC以外は秒の後に「+-時間」を付ける


UTC:2025-10-17T05:00:00Z
JST:2025-10-17T14:00:00+09:00

DateFormatの使い方

pubspec.yamlに追記

DateFormatを使うためにはpubspec.yamlのdependenciesに以下のようにintlを追加する(バージョンは最新のものを指定する)

intl: ^0.20.0

パターン文字に含まれる文字をパターン文字としてではなく文字として使いたい場合

外側に「"(ダブルクォート)」を使い、文字列として出力したい部分を「'(シングルクォート)」で囲む。逆に「'」を外側「"」を内側に使うのは不可。

  • DateFormat('yearはyyyyだよ')
    →2025ePMrは2025だよ(yが「年」、aが「午前/午後」に変換されてしまっている)

  • DateFormat("'year'はyyyyだよ")
    →yearは2025だよ

パターン文字一覧

パターン 意味
y 年(最小桁数) 2025, 999
yy 西暦下2桁 25
yyyy 西暦4桁 2025
M 月(最小桁数) 9,
MM 月(2桁) 09
MMM 月(短縮名) Oct
MMMM 月(フル名) October
d 日(最小桁数) 1
dd 日(2桁) 01
E 曜日(短縮) Sat
EEEE 曜日(フル) Saturday
EEEEE 曜日(最短) S(ロケールによる)
H 時(24時間制、最小桁数) 1,
HH 時(24時間制、2桁) 01
h 時(12時間制、最小桁数) 1
hh 時(12時間制、2桁) 01
m 分(最小桁数) 1
mm 分(2桁) 01
s 秒(最小桁数) 1
ss 秒(2桁) 01
S, SS, SSS ミリ秒(1〜3桁) 123
a 午前/午後 PM
z タイムゾーン略称 GMT+9orJST(環境依存)
Z タイムゾーンオフセット +0900
ZZZZ タイムゾーン名(フル) Japan Standard Time
Q 四半期(数字のみ) 4
QQQ 四半期(短縮) Q4
QQQQ 四半期(フル) 4th quarter

テンプレート

任意の形式にフォーマット

DateTime now = DateTime.now();
DateFormat outputFormat = DateFormat('yyyy年MM月dd日 HH:mm');
String date = outputFormat.format(now);

debugPrint(date);
// 出力:2025年10月19日 10:25

任意の日時を取得

DateTime now = DateTime(2025, 10, 20, 12, 01, 02);
debugPrint(now.toIso8601String());
// 出力:2025-10-20T12:01:02.000

時間を足し引きして未来/過去の日時にする

DateTime now = DateTime.now();
DateTime future = now.add(Duration(days: 1, hours: 1, minutes: 1, seconds: 1));
DateTime past = now.subtract(Duration(days: 1, hours: 1, minutes: 1, seconds: 1));

debugPrint(now.toString());
// 出力:2025-10-20 21:55:16.657286
debugPrint(future.toString());
// 出力:2025-10-21 22:56:17.657286
debugPrint(past.toString());
// 出力:2025-10-19 20:54:15.657286

UTC/JSTへの変換

DateTime now = DateTime.now();
DateTime nowUtc = now.toUtc();
DateTime nowJst = nowUtc.toLocal();

debugPrint(now.toIso8601String());
// 出力:2025-10-20T22:02:57.946454
debugPrint(nowUtc.toIso8601String());
// 出力:2025-10-20T13:02:57.946454Z
debugPrint(nowJst.toIso8601String());
// 出力:2025-10-20T22:02:57.946454

Discussion