アプリ開発

【flutter】DateTime・TimeOfDayのデータ変換一覧

皆さんこんにちは。

flutterでDateTime周りの情報を操作する時に、

「これってどうやってフォーマット変換するんやっけ??」

みたいなことがめちゃくちゃありませんか??

僕はしょっちゅうなので、この記事にまとめまくっていこうと思います。

マーク
マーク
この1記事で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

で、時間と分の情報がとってこれます。

まとめ

いかがでしたか??

足りない情報は気付き次第追記していく予定です。

ブックマークしてもらえるくらい有益な記事になれば幸いです^^