有没有一种很好的方式可以在不处理时区的情况下以hh:mm:ss这样的格式设置Duration?
我尝试了这个:
DateTime durationDate = DateTime.fromMillisecondsSinceEpoch(0);
String duration = DateFormat('hh:mm:ss').format(durationDate);
Run Code Online (Sandbox Code Playgroud)
但我总是要花1个小时,在这种情况下,它会说 01:00:00
当我这样做时:
Duration(milliseconds: 0).toString();
Run Code Online (Sandbox Code Playgroud)
我得到这个: 0:00:00.000000
Ale*_*Pad 28
你可以自己开始创建一种格式,来吧:
String sDuration = "${duration.inHours}:${duration.inMinutes.remainder(60)}:${(duration.inSeconds.remainder(60))}";
Run Code Online (Sandbox Code Playgroud)
fra*_*k06 21
HH:mm:ss从 a获取的最短、最优雅和可靠的方法Duration是:
format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
Run Code Online (Sandbox Code Playgroud)
用法示例:
main() {
final d1 = Duration(hours: 17, minutes: 3);
final d2 = Duration(hours: 9, minutes: 2, seconds: 26);
final d3 = Duration(milliseconds: 0);
print(format(d1)); // 17:03:00
print(format(d2)); // 09:02:26
print(format(d3)); // 00:00:00
}
Run Code Online (Sandbox Code Playgroud)
Eva*_*Chu 19
只是一个快速的实施。
这将以 [DD]d:[HH]h:[mm]m:[ss]s 格式显示持续时间,如果前导元素为 0,则将忽略该元素。但秒将始终存在。
例如:
1天:2小时:3分:4秒
2h:3m:4s
3米:4秒
4s
0秒
/// Returns a formatted string for the given Duration [d] to be DD:HH:mm:ss
/// and ignore if 0.
static String formatDuration(Duration d) {
var seconds = d.inSeconds;
final days = seconds~/Duration.secondsPerDay;
seconds -= days*Duration.secondsPerDay;
final hours = seconds~/Duration.secondsPerHour;
seconds -= hours*Duration.secondsPerHour;
final minutes = seconds~/Duration.secondsPerMinute;
seconds -= minutes*Duration.secondsPerMinute;
final List<String> tokens = [];
if (days != 0) {
tokens.add('${days}d');
}
if (tokens.isNotEmpty || hours != 0){
tokens.add('${hours}h');
}
if (tokens.isNotEmpty || minutes != 0) {
tokens.add('${minutes}m');
}
tokens.add('${seconds}s');
return tokens.join(':');
}
Run Code Online (Sandbox Code Playgroud)
csg*_*000 12
这是另一个版本。在这一点上这是所有偏好,但我喜欢它是干的,不需要函数声明(包装函数显然是可选的),尽管它肯定有点函数链接重。
袖珍的
String formatTime(double time) {
Duration duration = Duration(milliseconds: time.round());
return [duration.inHours, duration.inMinutes, duration.inSeconds].map((seg) => seg.remainder(60).toString().padLeft(2, '0')).join(':');
}
Run Code Online (Sandbox Code Playgroud)
格式化版本
String timeFormatter (double time) {
Duration duration = Duration(milliseconds: time.round());
return [duration.inHours, duration.inMinutes, duration.inSeconds]
.map((seg) => seg.remainder(60).toString().padLeft(2, '0'))
.join(':');
}
Run Code Online (Sandbox Code Playgroud)
die*_*per 10
您可以使用Duration和实现此方法:
String _printDuration(Duration duration) {
String twoDigits(int n) {
if (n >= 10) return "$n";
return "0$n";
}
String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
return "${twoDigits(duration.inHours)}:$twoDigitMinutes:$twoDigitSeconds";
}
Run Code Online (Sandbox Code Playgroud)
用法:
final now = Duration(seconds: 30);
print("${_printDuration(now)}");
Run Code Online (Sandbox Code Playgroud)
基于@diegoveloper 的回答,我把它变成了一个可扩展的扩展
extension DurationExtensions on Duration {
/// Converts the duration into a readable string
/// 05:15
String toHoursMinutes() {
String twoDigitMinutes = _toTwoDigits(this.inMinutes.remainder(60));
return "${_toTwoDigits(this.inHours)}:$twoDigitMinutes";
}
/// Converts the duration into a readable string
/// 05:15:35
String toHoursMinutesSeconds() {
String twoDigitMinutes = _toTwoDigits(this.inMinutes.remainder(60));
String twoDigitSeconds = _toTwoDigits(this.inSeconds.remainder(60));
return "${_toTwoDigits(this.inHours)}:$twoDigitMinutes:$twoDigitSeconds";
}
String _toTwoDigits(int n) {
if (n >= 10) return "$n";
return "0$n";
}
}
Run Code Online (Sandbox Code Playgroud)
定义这个:
extension on Duration {
String format() => '$this'.split('.')[0].padLeft(8, '0');
}
Run Code Online (Sandbox Code Playgroud)
用法:
String time = Duration(seconds: 3661).format(); // 01:01:01
Run Code Online (Sandbox Code Playgroud)
详细说明其他答案,这是一个也格式化天的实现:
extension DurationFormatter on Duration {
/// Returns a day, hour, minute, second string representation of this `Duration`.
///
///
/// Returns a string with days, hours, minutes, and seconds in the
/// following format: `dd:HH:MM:SS`. For example,
///
/// var d = new Duration(days:19, hours:22, minutes:33);
/// d.dayHourMinuteSecondFormatted(); // "19:22:33:00"
String dayHourMinuteSecondFormatted() {
this.toString();
return [
this.inDays,
this.inHours.remainder(24),
this.inMinutes.remainder(60),
this.inSeconds.remainder(60)
].map((seg) {
return seg.toString().padLeft(2, '0');
}).join(':');
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,intl包DateFormat类没有帮助:它将 a 的格式标记Duration为未实现:
formatDuration(DateTime reference) ? String
NOT YET IMPLEMENTED. [...]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3904 次 |
| 最近记录: |