Async and Practical
DateTime Difference and Duration
Calling end.difference(start) compares two DateTime values and returns a Duration. From there, inMinutes gives the total minutes, and integer division and modulo split that into hours and leftover minutes.
Program
Play the program to compute the elapsed time between 09:05 and 10:45 UTC.
duration_difference.dart
Replay: real traced execution (multi-file project)
void main() {
var start = DateTime.utc(2024, 7, 4, 9, 5);
var end = DateTime.utc(2024, 7, 4, 10, 45);
var elapsed = end.difference(start);
var totalMinutes = elapsed.inMinutes;
var hours = totalMinutes ~/ 60;
var minutes = totalMinutes % 60;
print('elapsed=${hours}h ${minutes}m');
}
start ← DateTime.utc(2024-07-04 09:05:00)
1void main() {2 var start = DateTime.utc(2024, 7, 4, 9, 5);3 var end = DateTime.utc(2024, 7, 4, 10, 45);values this stepDateTime.utc(2024-07-04 09:05:00)startend ← DateTime.utc(2024-07-04 10:45:00)
2var start = DateTime.utc(2024, 7, 4, 9, 5);3var end = DateTime.utc(2024, 7, 4, 10, 45);4var elapsed = end.difference(start);values this stepDateTime.utc(2024-07-04 10:45:00)endelapsed ← Duration 1h 40m
3var end = DateTime.utc(2024, 7, 4, 10, 45);4var elapsed = end.difference(start);5var totalMinutes = elapsed.inMinutes;values this stepDuration 1h 40melapsedtotalMinutes ← 100
4var elapsed = end.difference(start);5var totalMinutes = elapsed.inMinutes;6var hours = totalMinutes ~/ 60;values this step100totalMinutesDuration 1h 40melapsedhours ← 1
5var totalMinutes = elapsed.inMinutes;6var hours = totalMinutes ~/ 60;7var minutes = totalMinutes % 60;values this step1hours100totalMinutesminutes ← 40
6var hours = totalMinutes ~/ 60;7var minutes = totalMinutes % 60;8print('elapsed=${hours}h ${minutes}m');values this step40minutes100totalMinutesprint('elapsed=${hours}h ${minutes}m');
7 var minutes = totalMinutes % 60;8 print('elapsed=${hours}h ${minutes}m');9}outputelapsed=1h 40mvalues this step1hours40minutes
difference
`end.difference(start)` returns a `Duration` between two `DateTime` values; here, 100 minutes.
inMinutes
`Duration.inMinutes` exposes the total whole minutes, ignoring sub-minute resolution.
split with ~/ and %
`totalMinutes ~/ 60` is the hour count and `totalMinutes % 60` is the leftover minutes.