LocalTime constructor
Creates a local time at the given hour, minute, second and millisecond or microseconds or nanoseconds within the second.
hour: The hour of day.minute: The minute of the hour.second: The second of the minute.ms: The millisecond of the second.us: The microsecond within the second.ns: The nanosecond within the second.
Returns: The resulting time.
- RangeError: The parameters do not form a valid time.
- ArgumentError: More than one of (
ms,us,ns) has a value.
When\if https://github.com/dart-lang/sdk/issues/7056 becomes implemented,
second will become optional, like this:
(int hour, int minute, [int second], {int ms, int us, int ns}).
The is a planned backwards compatible public API change.
Implementation
factory LocalTime(int hour, int minute, int second,
{int? ms, int? us, int? ns}) {
// Avoid the method calls which give a decent exception unless we're actually going to fail.
if (hour < 0 ||
hour >= TimeConstants.hoursPerDay ||
minute < 0 ||
minute >= TimeConstants.minutesPerHour ||
second < 0 ||
second >= TimeConstants.secondsPerMinute) {
Preconditions.checkArgumentRange(
'hour', hour, 0, TimeConstants.hoursPerDay - 1);
Preconditions.checkArgumentRange(
'minute', minute, 0, TimeConstants.minutesPerHour - 1);
Preconditions.checkArgumentRange(
'second', second, 0, TimeConstants.secondsPerMinute - 1);
}
var nanoseconds = hour * TimeConstants.nanosecondsPerHour +
minute * TimeConstants.nanosecondsPerMinute +
second * TimeConstants.nanosecondsPerSecond;
;
// Only one sub-second variable may be implemented.
// todo: is there a more performant check here?
if (ms != null) {
if (us != null) throw ArgumentError(_munArgumentError);
if (ns != null) throw ArgumentError(_munArgumentError);
if (ms < 0 || ms >= TimeConstants.millisecondsPerSecond)
Preconditions.checkArgumentRange(
'milliseconds', ms, 0, TimeConstants.millisecondsPerSecond - 1);
nanoseconds += ms * TimeConstants.nanosecondsPerMillisecond;
} else if (us != null) {
if (ns != null) throw ArgumentError(_munArgumentError);
if (us < 0 || us >= TimeConstants.microsecondsPerSecond)
Preconditions.checkArgumentRange(
'microseconds', us, 0, TimeConstants.microsecondsPerSecond - 1);
nanoseconds += us * TimeConstants.nanosecondsPerMicrosecond;
} else if (ns != null) {
if (ns < 0 || ns >= TimeConstants.nanosecondsPerSecond)
Preconditions.checkArgumentRange(
'nanoseconds', ns, 0, TimeConstants.nanosecondsPerSecond - 1);
nanoseconds += ns;
}
return LocalTime._(nanoseconds);
}