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。如果 microsecond 等于 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";
}
}