toIso8601String 方法

String 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";
  }
}