Флаттер: неправильные дни недели

#flutter #days #weekday #intl #flutter-intl

#флаттер #дни #день недели #intl #flutter-intl

Вопрос:

с понедельника по четверг я получаю правильные дни, но с пятницы я получаю неправильные дни. Почему?

Пример кода:

 Text(DateFormat('EEEE').format(DateTime(DateTime.friday))),
 

И я получаю субботу. Это ошибка?

Ответ №1:

Это не ошибка, DateTime() конструктор по умолчанию принимает year в качестве первого аргумента:

   DateTime(int year,
      [int month = 1,
      int day = 1,
      int hour = 0,
      int minute = 0,
      int second = 0,
      int millisecond = 0,
      int microsecond = 0])
      : this._internal(year, month, day, hour, minute, second, millisecond,
            microsecond, false);
 

Итак, этот код:

 DateTime date = DateTime(DateTime.friday);
 

По сути, это построение a DateTime года 5, потому DateTime.friday что это не что иное, как a const int , равное 5:

   static const int monday = 1;
  static const int tuesday = 2;
  static const int wednesday = 3;
  static const int thursday = 4;
  static const int friday = 5;
  static const int saturday = 6;
  static const int sunday = 7;
  static const int daysPerWeek = 7;
 

Форматирование с DateFormat возвратом субботы, которая является первым днем года:

 import 'dart:core';
import 'package:intl/intl.dart';

main() {
  DateTime date = DateTime(DateTime.friday); // creates a DateTime of the year 5
  print(date.year);    // year: 5
  print(date.month);   // month: Jan (default = 1)
  print(date.weekday); // day: Saturday (first day of the year)
  print("${date.year}-${date.month}-${date.day}"); // 5-1-1
}
 

DateTime должен использоваться для определения конкретной даты и времени, например, пятница, 11 декабря 2020 года, его нельзя использовать для определения какой-либо пятницы.