toIso8601String 方法
返回ISO-8601完整精度的扩展格式表示。
格式为 UTC 时间时为 yyyy-MM-ddTHH:mm:ss.mmmuuuZ
,对于本地/非UTC 时间为 yyyy-MM-ddTHH:mm:ss.mmmuuu
(不跟随着"Z"),其中
yyyy
是表示年份的四位数字(可能为负),如果年份在 -9999 到 9999 范围内,否则为带符号的六位数字年份。MM
是月份,范围在 01 到 12 之间,dd
是月份中的天数,范围在 01 到 31 之间,HH
是小时的范围在 00 到 23 之间,mm
是分钟,范围在 00 到 59 之间,ss
是秒,范围在 00 到 59(不包括闰秒),mmm
是毫秒,范围在 000 到 999 之间,而且uuu
是微秒,范围在 001 到 999。如果 微秒 等于 0,则该部分被省略。
结果字符串可以使用 parse 进行解析。
final moonLanding = DateTime.utc(1969, 7, 20, 20, 18, 04);
final isoDate = moonLanding.toIso8601String();
print(isoDate); // 1969-07-20T20:18:04.000Z
实现
String toIso8601String() {
String y =
(year >= -9999 && year <= 9999) ? _fourDigits(year) : _sixDigits(year);
String m = _twoDigits(month);
String d = _twoDigits(day);
String h = _twoDigits(hour);
String min = _twoDigits(minute);
String sec = _twoDigits(second);
String ms = _threeDigits(millisecond);
String us = microsecond == 0 ? "" : _threeDigits(microsecond);
if (isUtc) {
return "$y-$m-${d}T$h:$min:$sec.$ms${us}Z";
} else {
return "$y-$m-${d}T$h:$min:$sec.$ms$us";
}
}