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');
}
  1. 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)start
  2. end ← 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)end
  3. elapsed ← 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 40melapsed
  4. totalMinutes ← 100

    4var elapsed = end.difference(start);5var totalMinutes = elapsed.inMinutes;6var hours = totalMinutes ~/ 60;
    values this step100totalMinutesDuration 1h 40melapsed
  5. hours ← 1

    5var totalMinutes = elapsed.inMinutes;6var hours = totalMinutes ~/ 60;7var minutes = totalMinutes % 60;
    values this step1hours100totalMinutes
  6. minutes ← 40

    6var hours = totalMinutes ~/ 60;7var minutes = totalMinutes % 60;8print('elapsed=${hours}h ${minutes}m');
    values this step40minutes100totalMinutes
  7. print('elapsed=${hours}h ${minutes}m');

    7  var minutes = totalMinutes % 60;8  print('elapsed=${hours}h ${minutes}m');9}
    outputelapsed=1h 40m
    values 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.