Open
Description
Currently DateTime
has the following definition:
class DateTime implements Comparable<DateTime> {
// Weekday constants that are returned by [weekday] method:
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;
// Month constants that are returned by the [month] getter.
static const int january = 1;
static const int february = 2;
static const int march = 3;
static const int april = 4;
static const int may = 5;
static const int june = 6;
static const int july = 7;
static const int august = 8;
static const int september = 9;
static const int october = 10;
static const int november = 11;
static const int december = 12;
static const int monthsPerYear = 12;
...
external int get weekday;
external int get month;
...
}
I propose that we deprecate the constants in DateTime
and create extension types to represent the Month
and Weekday
.
class DateTime implements Comparable<DateTime> {
...
external Weekday get weekday;
external Month get month;
...
}
extension type const Weekday(int _) implements int {
// Weekday constants that are returned by [weekday] method:
static const Weekday monday = Weekday(1);
static const Weekday tuesday = Weekday(2);
static const Weekday wednesday = Weekday(3);
static const Weekday thursday = Weekday(4);
static const Weekday friday = Weekday(5);
static const Weekday saturday = Weekday(6);
static const Weekday sunday = Weekday(7);
static const int daysPerWeek = 7;
}
extension type const Month(int _) implements int {
// Month constants that are returned by the [month] getter.
static const Month january = Month(1);
static const Month february = Month(2);
static const Month march = Month(3);
static const Month april = Month(4);
static const Month may = Month(5);
static const Month june = Month(6);
static const Month july = Month(7);
static const Month august = Month(8);
static const Month september = Month(9);
static const Month october = Month(10);
static const Month november = Month(11);
static const Month december = Month(12);
static const int monthsPerYear = 12;
}
The reason for this change is to better enable the upcoming dot-shorthands
feature.
The proposed change would allow us to write for example:
void main() {
if (DateTime.now() case DateTime(weekday: .saturday || .sunday)) {
print('today is a weekend');
} else {
print('today is a weekday');
}
}