Duration class
A Duration represents a time span. A duration can be negative.
class Duration implements Comparable { static const int MILLISECONDS_PER_SECOND = 1000; static const int SECONDS_PER_MINUTE = 60; static const int MINUTES_PER_HOUR = 60; static const int HOURS_PER_DAY = 24; static const int MILLISECONDS_PER_MINUTE = MILLISECONDS_PER_SECOND * SECONDS_PER_MINUTE; static const int MILLISECONDS_PER_HOUR = MILLISECONDS_PER_MINUTE * MINUTES_PER_HOUR; static const int MILLISECONDS_PER_DAY = MILLISECONDS_PER_HOUR * HOURS_PER_DAY; static const int SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR; static const int SECONDS_PER_DAY = SECONDS_PER_HOUR * HOURS_PER_DAY; static const int MINUTES_PER_DAY = MINUTES_PER_HOUR * HOURS_PER_DAY; /** * This [Duration] in milliseconds. */ final int inMilliseconds; /** * The duration is the sum of all individual parts. This means that individual * parts don't need to be less than the next-bigger unit. For example [hours] * is allowed to have a value greater than 23. * * All individual parts are allowed to be negative. * All arguments are by default 0. */ const Duration({int days: 0, int hours: 0, int minutes: 0, int seconds: 0, int milliseconds: 0}) : inMilliseconds = days * Duration.MILLISECONDS_PER_DAY + hours * Duration.MILLISECONDS_PER_HOUR + minutes * Duration.MILLISECONDS_PER_MINUTE + seconds * Duration.MILLISECONDS_PER_SECOND + milliseconds; /** * This [Duration] in days. Incomplete days are discarded */ int get inDays { return inMilliseconds ~/ Duration.MILLISECONDS_PER_DAY; } /** * This [Duration] in hours. Incomplete hours are discarded. * The returned value can be greater than 23. */ int get inHours { return inMilliseconds ~/ Duration.MILLISECONDS_PER_HOUR; } /** * This [Duration] in minutes. Incomplete minutes are discarded. * The returned value can be greater than 59. */ int get inMinutes { return inMilliseconds ~/ Duration.MILLISECONDS_PER_MINUTE; } /** * This [Duration] in seconds. Incomplete seconds are discarded. * The returned value can be greater than 59. */ int get inSeconds { return inMilliseconds ~/ Duration.MILLISECONDS_PER_SECOND; } bool operator ==(other) { if (other is !Duration) return false; return inMilliseconds == other.inMilliseconds; } int get hashCode { return inMilliseconds.hashCode; } int compareTo(Duration other) { return inMilliseconds.compareTo(other.inMilliseconds); } String toString() { String threeDigits(int n) { if (n >= 100) return "$n"; if (n > 10) return "0$n"; return "00$n"; } String twoDigits(int n) { if (n >= 10) return "$n"; return "0$n"; } if (inMilliseconds < 0) { Duration duration = new Duration(milliseconds: -inMilliseconds); return "-$duration"; } String twoDigitMinutes = twoDigits(inMinutes.remainder(Duration.MINUTES_PER_HOUR)); String twoDigitSeconds = twoDigits(inSeconds.remainder(Duration.SECONDS_PER_MINUTE)); String threeDigitMs = threeDigits(inMilliseconds.remainder(Duration.MILLISECONDS_PER_SECOND)); return "$inHours:$twoDigitMinutes:$twoDigitSeconds.$threeDigitMs"; } }
Implements
Static Properties
const int MILLISECONDS_PER_DAY #
static const int MILLISECONDS_PER_DAY = MILLISECONDS_PER_HOUR * HOURS_PER_DAY;
const int MILLISECONDS_PER_HOUR #
static const int MILLISECONDS_PER_HOUR = MILLISECONDS_PER_MINUTE * MINUTES_PER_HOUR;
const int MILLISECONDS_PER_MINUTE #
static const int MILLISECONDS_PER_MINUTE = MILLISECONDS_PER_SECOND * SECONDS_PER_MINUTE;
Constructors
const Duration([int days = 0, int hours = 0, int minutes = 0, int seconds = 0, int milliseconds = 0]) #
The duration is the sum of all individual parts. This means that individual parts don't need to be less than the next-bigger unit. For example hours is allowed to have a value greater than 23.
All individual parts are allowed to be negative. All arguments are by default 0.
const Duration({int days: 0, int hours: 0, int minutes: 0, int seconds: 0, int milliseconds: 0}) : inMilliseconds = days * Duration.MILLISECONDS_PER_DAY + hours * Duration.MILLISECONDS_PER_HOUR + minutes * Duration.MILLISECONDS_PER_MINUTE + seconds * Duration.MILLISECONDS_PER_SECOND + milliseconds;
Properties
final int hashCode #
Get a hash code for this object.
All objects have hash codes. Hash codes are guaranteed to be the
same for objects that are equal when compared using the equality
operator ==
. Other than that there are no guarantees about
the hash codes. They will not be consistent between runs and
there are no distribution guarantees.
If a subclass overrides hashCode it should override the equality operator as well to maintain consistency.
int get hashCode { return inMilliseconds.hashCode; }
final int inDays #
This Duration in days. Incomplete days are discarded
int get inDays { return inMilliseconds ~/ Duration.MILLISECONDS_PER_DAY; }
final int inHours #
This Duration in hours. Incomplete hours are discarded. The returned value can be greater than 23.
int get inHours { return inMilliseconds ~/ Duration.MILLISECONDS_PER_HOUR; }
Operators
bool operator ==(other) #
The equality operator.
The default behavior for all Objects is to return true if and
only if this
and
other are the same object.
If a subclass overrides the equality operator it should override the hashCode method as well to maintain consistency.
bool operator ==(other) { if (other is !Duration) return false; return inMilliseconds == other.inMilliseconds; }
Methods
int compareTo(Duration other) #
Compares this object to another Comparable
Returns a value like a Comparator when comparing this
to
other.
May throw an ArgumentError if
other is of a type that
is not comparable to this
.
int compareTo(Duration other) { return inMilliseconds.compareTo(other.inMilliseconds); }
String toString() #
Returns a string representation of this object.
String toString() { String threeDigits(int n) { if (n >= 100) return "$n"; if (n > 10) return "0$n"; return "00$n"; } String twoDigits(int n) { if (n >= 10) return "$n"; return "0$n"; } if (inMilliseconds < 0) { Duration duration = new Duration(milliseconds: -inMilliseconds); return "-$duration"; } String twoDigitMinutes = twoDigits(inMinutes.remainder(Duration.MINUTES_PER_HOUR)); String twoDigitSeconds = twoDigits(inSeconds.remainder(Duration.SECONDS_PER_MINUTE)); String threeDigitMs = threeDigits(inMilliseconds.remainder(Duration.MILLISECONDS_PER_SECOND)); return "$inHours:$twoDigitMinutes:$twoDigitSeconds.$threeDigitMs"; }