🗓️

【Flutter】日時を日本語にフォーマット&曜日も取り出す方法

2022/09/23に公開約3,500字

やりたいこと

2022年9月24日土曜日 //普通に曜日表示
2022年9月24日(土曜日) //曜日をカッコでくくる
2022年9月24日(土) //一文字の曜日をカッコでくくる

のような感じに、日時を

  • 曜日

で取得したい。この記事を理解できれば、何時何分何秒も表示できるようになると思います。

著者の環境

  • M1MacBookAir
  • Monterey(OS)
  • Flutter(下記)
[✓] Flutter (Channel stable, 3.3.2, on macOS 12.6 21G115 darwin-arm, locale
    ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 14.0)

基本的にあまりOSや機種には依存しないので大丈夫だと思いますが、Flutterのバージョンなどはお気をつけください。

お願い

調べても出てこなかったので自作しましたが、もっと綺麗なやり方があったらぜひ教えてください。

普段はプログラミングについての記事を共有しています。ぜひご覧ください!

https://www.chickensblog.com/
https://www.chickensblog.com/progate/
https://www.chickensblog.com/scratch-minecraft-2d/
https://zenn.dev/teba_eleven/articles/aedc265d30e751
https://zenn.dev/teba_eleven/articles/a0aa439179e4a7
https://zenn.dev/teba_eleven/articles/c0649d0195ba74

intlを追加(パッケージ)

pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  intl: //追加
ターミナル
flutter pub get

pub getをしてパッケージを追加?認識?させましょう。しないとimportできません。

import

main.dart
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';

年・月・日・曜日を返す関数

main.dart
    ・・・
  String getDate(){
	  //日本語に設定
    initializeDateFormatting("ja");
    return DateFormat.yMMMMEEEEd('ja').format(DateTime.now()).toString();
  }
 }

曜日が()で囲まれていないのが個人的にみにくいので、下のプログラムを実際に使っています。

年・月・日・曜日(カッコで囲ってある)を返す関数

main.dart
    ・・・
  String getDate(){
    initializeDateFormatting("ja");
    //年・月・日だけ取り出す
    return DateFormat.yMMMd('ja').format(DateTime.now())+
    //曜日だけ取り出し、変数展開で文字列に埋め込んでいる
        '(${DateFormat.EEEE('ja').format(DateTime.now())})';
	// "(" + DateFormat.E('ja').format(DateTime.now()).toString()+ ")";
	// ↑と同じことを、連結ではなく変数展開でやっている
  }
 }

単純に、DateFormat.yMMMd('ja').format(DateTime.now())で年月日を取り出し、DateFormat.E('ja')で曜日部分を取り出し、それに()を連結させてみました。ちょっとゴリ押し感がありますが、もっとスマートにできる場合は教えてください。

曜日を一文字だけ取得する


"土曜日"を"土"の一文字だけにしたい場合は、

DateFormat.EEEE('ja')

を、

DateFormat.E('ja')

にすると一文字だけ取り出されます。

main.dart
  String getDate(){
    locale: const Locale("ja"),
    initializeDateFormatting("ja");
    return DateFormat.yMMMd('ja').format(DateTime.now()).toString()+
	    //ここをEEEEからEにしただけ!
        '(${DateFormat.E('ja').format(DateTime.now())})';
  }

少しでも参考になればうれしいです。

あわせて読みたい

https://www.chickensblog.com/m1mac-win11/
https://www.chickensblog.com/laravel-docker/
https://www.chickensblog.com/scroll-enemy/
https://www.chickensblog.com/scratch-easy-bp/
https://www.chickensblog.com/colab-yolov5/
https://zenn.dev/teba_eleven/articles/78904f385da2c8
https://zenn.dev/teba_eleven/articles/00a1eae31c5a6f
https://zenn.dev/teba_eleven/articles/d239911de332ff
https://zenn.dev/teba_eleven/articles/4329010eed3172

参考記事

https://qiita.com/hiko1129/items/90a201f857fb125bd8ef#文字列結合と変数展開
https://zenn.dev/kenara/articles/7f93790003da50
https://2play.dev/get-day-of-week-from-datetime/
https://417.run/pg/flutter-dart/flutter-textfield-datepicker/

Discussion

ログインするとコメントできます