0

我正在使用 Dart 制作一个简单的事件日历,并且我想确定每个月的第一天是一周中的哪一天。所以我有这个功能......

int FirstDayOfMonthFallsOnThisDayOfWeek(int year, int month) {
  int DayOfWeek = 0;
  DateTime theDate = new DateTime(year, month, 1, 0, 0, 0, 0);
  DateFormat df = new DateFormat('E');
  switch(df.format(theDate).toUpperCase()) {
    case "SUNDAY":
      DayOfWeek = 1;
      break;
    case "MONDAY":
      DayOfWeek = 2;
      break;
    case "TUESDAY":
      DayOfWeek = 3;
      break;
    case "WEDNESDAY":
      DayOfWeek = 4;
      break;
    case "THURSDAY":
      DayOfWeek = 5;
      break;
    case "FRIDAY":
      DayOfWeek = 6;
      break;
    case "SATURDAY":
      DayOfWeek = 7;
      break;
  }
  return DayOfWeek;
}

要使用 DateFormat,我有...

import 'package:intl/date_format.dart';

当然,我在我的 pubspec.yaml 中导入了 intl。但是,当我运行它时,我得到一个错误......

Internal error: '.../dart/cdkCalendar/web/out/packages/intl/date_format.dart':     
Error: line 5 pos 6: url expected
part of intl;

这是这个包的错误吗?还是我做错了我没有看到的事情。此外,如果有人知道更好的方法来完成我正在尝试做的事情,那也将不胜感激。谢谢。

4

4 回答 4

2

我不确定您为什么会收到错误消息,但这是一个更简单(未经测试)的版本:

int FirstDayOfMonthFallsOnThisDayOfWeek(int year, int month) {
  // Use hours != 0 to avoid daylight-saving issues. Shouldn't be a
  // problem with the 1st of a month, but still good practice.
  return new DateTime(year, month, 1, 12).weekday;
}
于 2013-03-14T21:28:37.170 回答
1

你不需要 Intl :

int FirstDayOfMonthFallsOnThisDayOfWeek(int year, int month) => new DateTime(year, month, 1).weekday;

于 2013-03-14T21:32:43.783 回答
0

好吧,我弄清楚了为什么会出现错误-我无法导入“零件”。但是,当我尝试导入“intl/intl.dart”时,出现了几个错误,所以我假设这个库可能还没有完成?无论如何,我发现...

DateTime.weekday;

...将返回该月开始的星期几。但是它从星期一开始为 1。我个人觉得这很尴尬,因为我见过的每个日历都从星期日开始,而历史上星期日是一周的第一天。所以,无论如何,我只是修改了我拥有的函数,以便它更正从星期日开始的星期几......

int _FirstDayOfMonthDayOfWeek() {
  DateTime theDate = new DateTime(_theDate.year, _theDate.month, 1, 0, 0, 0, 0);
  return (theDate.weekday == 7) ? 1 : theDate.weekday + 1;
}
于 2013-03-15T16:29:00.780 回答
0

你可以试试这个

List<String> weekdays = [
  'Monday',
  'Tuesday',
  'Wednesday',
  'Thurday',
  'Friday',
  'Saturday',
  'Sunday'
];
var now = DateTime.parse(DateTime.now().toString()).weekday;
return weekdays[now];
于 2021-01-18T13:40:32.670 回答