Felix Wang
Felix Wang

Reputation: 157

How to convert a Duration like string to a real Duration in Flutter?

As the title says, I got a string '01:23.290', it looks like a Duration, but not. Now I need to use this to compare with a real Duration, and I don't how to deal with it. Is there any methods?

Upvotes: 12

Views: 19397

Answers (5)

Anandh Krishnan
Anandh Krishnan

Reputation: 5984

void main() {
  String durationString = '2:30:45'; // Example duration string
  
  Duration duration = parseDuration(durationString);
  
  print(duration); // Outputs: 2:30:45.000000
  
  // You can access individual components of the duration if needed
  print(duration.inHours); // Outputs: 2
  print(duration.inMinutes); // Outputs: 150
  print(duration.inSeconds); // Outputs: 9045
}

Duration parseDuration(String durationString) {
  List<String> components = durationString.split(':');
  
  int hours = int.parse(components[0]);
  int minutes = int.parse(components[1]);
  int seconds = int.parse(components[2]);
  
  return Duration(hours: hours, minutes: minutes, seconds: seconds);
}

Upvotes: 0

Ghominejad
Ghominejad

Reputation: 1798

List<String> timeParts = time.split(':');

Duration duration = Duration(hours: int.parse(timeParts[0]), minutes: int.parse(timeParts[1]), seconds: int.parse(timeParts[2]));

Upvotes: 5

Ravi Teja Gudapati
Ravi Teja Gudapati

Reputation: 2879

Package duration provides functions parseTime and tryParseTime to parse duration strings obtained by Duration().toString().

Usage is straight forward:

print(parseTime(Duration(hours: 5, seconds: 10, milliseconds: 567).toString()));

Upvotes: 4

leandroreis
leandroreis

Reputation: 31

Another way using DateTime and DateFormat:

Duration durationParse(String time) {
  final ts = DateFormat('y-MM-dd').format(DateTime.now());
  final dt = DateTime.parse('$ts $time');
  return Duration(hours: dt.hour, minutes: dt.minute, seconds: dt.second);
}

Upvotes: 2

Richard Heap
Richard Heap

Reputation: 51732

Use a parsing function like this, then use the comparison methods of Duration:

Duration parseDuration(String s) {
  int hours = 0;
  int minutes = 0;
  int micros;
  List<String> parts = s.split(':');
  if (parts.length > 2) {
    hours = int.parse(parts[parts.length - 3]);
  }
  if (parts.length > 1) {
    minutes = int.parse(parts[parts.length - 2]);
  }
  micros = (double.parse(parts[parts.length - 1]) * 1000000).round();
  return Duration(hours: hours, minutes: minutes, microseconds: micros);
}

Upvotes: 38

Related Questions