Reputation: 157
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
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
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
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
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
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