0

Dart を使用して単純なイベント カレンダーを作成しています。各月の 1 日が何曜日にあたるかを判断したいと考えています。だから私はこの機能を持っています....

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として開始します。これまでに見たすべてのカレンダーは日曜日に始まり、歴史的に日曜日は週の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 に答える