広告 Flutter Dart Unity アプリ開発

DateTime型についてのまとめ

日付時刻型の宣言と計算方法

DateTime型は、時刻も保持しています。日数計算を行う場合は、時刻部分を消去する必要があります。

flutter pub add age_calculator
.....

  DateTime birthday = DateTime.parse('1900-01-01'); //仮の初期値 意味はない
  DateTime selecteddate1 = DateTime.parse('1900-01-01'); //仮の初期値 意味はない
  DateTime selecteddate2 = DateTime.parse('1900-01-01'); //仮の初期値 意味はない
  DateFormat dateF = DateFormat('yyyy-MM-dd'); // 時刻を消すために使用

  //shared_preferences に生年月日を保存ーーーーーーーーーーーーーー
  // 設定値を取得
  void _readSetting() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    // null なら、初期値で適当な日付文字列を渡す(Null Safety)
    String sbirthday = prefs.getString('birthday') ?? '1968-06-10';
    setState(() {
      birthday = DateTime.parse(sbirthday);
    });
  }

  // 設定値を保存
  void _saveSetting() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    // birthdayを1900-01-01形式の文字列に変換して保存
    String sbirthday = dateF.format(birthday);
    await prefs.setString('birthday', sbirthday);
  }

  // ウィジェットの初期化処理ーーーーーーーーーーーーーーーーーーーー
  @override
  void initState() {
    super.initState();
    // 保存された設定を読み出す
    _readSetting();
    // 時刻情報を削除する
    setState(() {
      DateTime d =DateTime.now(); // 時刻が入っている。
      String ds = dateF.format(d); // 一旦文字列にして時刻を消す
      selecteddate1 =  DateTime.parse(ds);
      selecteddate2 = selecteddate1.add(Duration(days: 30));
    });

  }

  // カレンダーで日付を選択するダイアログボックスーーーーーーーーーーーーー
  Future<void> _selectBirthDay(BuildContext context) async {
    final DateTime? picked = await showDatePicker(
      context: context,
      initialDate: birthday,
      firstDate: DateTime(DateTime.now().year - 120),
      lastDate: DateTime(DateTime.now().year + 120),
    );
    setState(() {
      DateTime d = picked ?? birthday;
      String sd = dateF.format(d);
      birthday = DateTime.parse(sd);
    });
  }

年齢計算その他色々

年齢計算でも、時刻情報を00:00にした方が良いでしょう。(1日ズレるだけですが)

import 'package:age_calculator/age_calculator.dart';

void main() {
  DateTime birthday = DateTime(1997, 3, 5);

  DateDuration duration;

  // 今日が 2021-03-08 の場合。。
  duration = AgeCalculator.age(birthday);
  print('Your age is $duration'); // Your age is Years: 24, Months: 0, Days: 3

  final year = duration.years;
  final month = duration.months;
  final day = duration.days;
  return '$year歳$monthヶ月$day日'; // 24歳0ヶ月3日

  //Find out your age on any given date
  duration = AgeCalculator.age(birthday, today: DateTime(2030, 5, 1));
  print('Your age is $duration'); // Your age is Years: 33, Months: 1, Days: 26

  // Find out when your next birthday will be at 2021-03-08
  duration = AgeCalculator.timeToNextBirthday(birthday);
  print('You next birthday will be in $duration');
  // You next birthday will be in Years: 0, Months: 11, Days: 25

  // Find out when your next birthday will be on any given date
  duration = AgeCalculator.timeToNextBirthday(birthday,
      fromDate: DateTime(2021, 3, 2));
  print('You next birthday will be in $duration');
  // You next birthday will be in Years: 0, Months: 0, Days: 3

  // Find out the difference between two dates
  duration = AgeCalculator.dateDifference(
    fromDate: DateTime(2021, 1, 2),
    toDate: DateTime(2025, 5, 2),
  );
  print('The difference is $duration');
  // You next birthday will be in Years: 4, Months: 4, Days: 0

  // Add time to any date
  DateTime date = AgeCalculator.add(
      date: DateTime(2021, 1, 2),
      duration: DateDuration(years: 5, months: 2, days: 1));
  print(date);
  // 2026-03-03 00:00:00.000
}

DateTime型の日本語表記、カレンダー入力Widget、西暦和暦変換、等

flutterの多言語対応は、2025年1月より大規模な変更がなされました。具体的には、日数計算アプリの記事を見てください。

日数計算アプリのソース

-Flutter Dart Unity アプリ開発