🗓️
【Flutter】日時を日本語にフォーマット&曜日も取り出す方法
やりたいこと
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のバージョンなどはお気をつけください。
お願い
調べても出てこなかったので自作しましたが、もっと綺麗なやり方があったらぜひ教えてください。
普段はプログラミングについての記事を共有しています。ぜひご覧ください!
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())})';
}
少しでも参考になればうれしいです。
あわせて読みたい
参考記事
Discussion