Flutter/Dart:将日期转换为 yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

Gra*_*llo 4 datetime date dart flutter

试图转换DateTime.now()成这样:2019-06-04T12:08:56.235-0700

API 文档坚持认为这是数据格式:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'但我无法弄清楚 Dart 的格式。甚至连 python 也没有。

我已经尝试过now.toIso8601String(),但它并没有完全解决它(即2019-12-03T17:50:23.476164)。它缺少最后-一部分和一位数字。flutter 中的 API 调用返回 a{code:415 message HTTP 415 Unsupported Media Type}作为结果。

我缺少什么?

Gra*_*llo 6

正如@hata 指出的那样,它尚未实施。因此,要完全按照要求添加 Z(时区作为数字),我这样做了:

String formatISOTime(DateTime date) {
    //converts date into the following format:
// or 2019-06-04T12:08:56.235-0700
    var duration = date.timeZoneOffset;
    if (duration.isNegative)
      return (DateFormat("yyyy-MM-ddTHH:mm:ss.mmm").format(date) +
          "-${duration.inHours.toString().padLeft(2, '0')}${(duration.inMinutes - (duration.inHours * 60)).toString().padLeft(2, '0')}");
    else
      return (DateFormat("yyyy-MM-ddTHH:mm:ss.mmm").format(date) +
          "+${duration.inHours.toString().padLeft(2, '0')}${(duration.inMinutes - (duration.inHours * 60)).toString().padLeft(2, '0')}");
  }
Run Code Online (Sandbox Code Playgroud)

实施的:

  void main() {
    DateTime getCurrentTimestamp = DateTime.now();
    print('agreement signed');
    String agreementSigned = formatISOTime(getCurrentTimestamp);
    print(agreementSigned);
  }
Run Code Online (Sandbox Code Playgroud)

运行时:

main();

// Result:

2021-10-29T17:53:56.053+0100

Run Code Online (Sandbox Code Playgroud)