皆さんこんにちは。
flutterでDateTime周りの情報を操作する時に、
「これってどうやってフォーマット変換するんだっけ??」
みたいなことがめちゃくちゃありませんか??
僕はしょっちゅうなので、この記事にまとめまくっていこうと思います。
目次
あらゆるDateTimeの取得方法
以下で使用するdateTimeには、現在時刻が入っています。
つまり、
DateTime dateTime = DateTime.now();
を使用してください。
1.現在時刻の取得
DateTime.now()
超簡単!
2.世界標準時の取得(ロンドン)
dateTime.toUtc()
UTCは協定世界時「Universal time coordinated」の略
日本からしてみると、9時間遅れていますね。
2020-07-25T00:13:39.765188Z
最後にZがついているのが目印です。
3.ローカルな時間の取得(日本時間の取得)
2で説明した世界標準時(dateTime)に対して、
dateTime.toLocal()
で取ってこれます。
4.年・月・時間・分の取得
年
dateTime.year
月
dateTime.month
時間
dateTime.hour
分
dateTime.minute
5.カスタムした時刻の取得(作り方)
2020年7月25日10時30分という時刻を作りたいとします。
final date = DateTime(2020,7,25,10,30);
ちなみに、この値をプリントすると、
flutter: 2020-07-25 10:30:00.000
となっています。
中の構造をのぞいてみると、
DateTime(int year,
[int month = 1,
int day = 1,
int hour = 0,
int minute = 0,
int second = 0,
int millisecond = 0,
int microsecond = 0])
となっているので、マイクロ秒まで指定して作成できるということですね!
時刻のフォーマット変換
flutterにおいて、DateTimeをただ単純に作っただけだと、初期のフォーマットは、
2020-07-25 09:32:40.175449
こんな感じになっていますね。
しかし、上記の時刻を画面に表示させるときに、
2020/7/25 9:32
というように形式を変更したい場合があると思います。
そんな時に使うのがフォーマットの変更です。
Dartのパッケージを使います。
String formattedDate = DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now());
これで、現在時刻のフォーマットを変更したものが取ってこれます。
ただし、型はStringになっています。
実際にprintしてみると、
flutter: 2020-07-25 10:13
ちゃんとこのような形式の時刻が表示されています。
String to DateTime(StringからDateTimeへ)
String型で表記されている時刻をDateTime型に戻したい場合は、以下の通りです。
DateTime dateFromString = DateTime.parse("String");
dateFromStringにStringから得られた時刻(DateTime)が入っています。
“String”のところに、String型で表記されている時刻を入れてください。
String to TimeOfDay (StringからTimeOfDayへ)
DateTimeの他に、TimeOfDayという型が存在します。
基本的に、TimeOfDayは日付は関係なく、時間だけ表したい時に使います。
最初は扱いづらく、DateTime型を使うことが多くなると思いますが。。。
若干複雑かも。
例えば、19時45分を表す String
String timeString = '19:45:00';
があるとします。
ここから、時間と分の情報を抜き取りたい場合を考えましょう。
一度、DateTimeに変換したいけど、年、月などの情報がないため、上手くいかない。。。
そんな時は以下のようにします。
TimeOfDay(
hour: int.parse(timeString.split(":")[0]),
minute: int.parse(timeString.split(":")));
何をしているかというと、19:45:00というtimeStringを.splitを使って 「:」で分割しているわけです。
LIst化しているということです。
[19,45,00]という3つの要素に分けられ、その要素をint化して、hour、minuteに入れています。
DateTime to TimeOfDay (DateTimeからTimeOfDayへ)
例えば、現在の時刻をTimeOfDayに変換する場合は、
TimeOfDay timeOfDay = TimeOfDay.fromDateTime(DateTime.now());
こんな感じです。
これはあんまりないかもですが。。
現在時刻なら、むしろこれでいいですね。。
TimeOfDay timeOfDay = TimeOfDay.now();
TimeOfDay to DateTime (TimeOfDayからDateTimeへ)
TimeOfDayは時間と分(hourとminute)の情報しか持っていないので、年、月、日にちなどの情報は他から持ってくる必要があります。
例えば、DateTime型のdateTimeを、TimeOfDay型のtimeOfDayから作るとします。
その場合は、
static TimeOfDay timeOfDay =
TimeOfDay.fromDateTime(DateTime(2020, 7, 25, 10, 30));
final dateTime = DateTime(2020, 7, 25, timeOfDay.hour, timeOfDay.minute);
こんな感じで、時間と分のところだけ、TimeOfDayの情報を入れてやります。
型がTimeOfDayなら、
(TimeOfDay).hour、(TimeOfDay).minute
で、時間と分の情報がとってこれます。
まとめ
いかがでしたか??
足りない情報は気付き次第追記していく予定です。
ブックマークしてもらえるくらい有益な記事になれば幸いです^^
他にもこんな記事を書いてます!


