Dart 中的日期格式,包括 GMT

Date format in Dart which includes GMT

如何在 Dart 中将当前时间转换为 GMT/UTC 时间,类似于 javascript 方式:new Date().toUTCString():

Tue, 01 Nov 2011 19:06:35 GMT

我尝试了几个格式化程序(见下文),但没有用

//var f = DateFormat('E, d MMM yyyy HH:mm:ss z');
var f = DateFormat('E, d MMM yyyy HH:mm:ss'); 
    var date = f.format(DateTime.now());

var f = DateFormat('EEE, d MMM yyyy HH:mm:ss'); 
var date = f.format(DateTime.now());

此输出日期格式为 2011 年 11 月 1 日星期二 19:06:35,不包括 GMT

将您的当前时间转换为 UTC 并将 " GMT" 附加到字符串。

import 'package:intl/intl.dart';

void main(List<String> arguments) async {
  var f = DateFormat('E, d MMM yyyy HH:mm:ss');
  var date = f.format(DateTime.now().toUtc()) + " GMT";
  print(date);
}


使用任意时区(不仅仅是 GMT/UTC)

虽然它在文档中,但您不能使用 DateTime 创建具有任意时区的字符串,因为缺少时区支持/实现,并且自 2015 年以来就是一个 GitHub 问题。例如,您可以不要在字符串中显示不同的时区,因为在格式字符串中使用 z 不起作用:调用者得到 UnimplementedError。查看 3 个相关的 GitHub 问题:one, two and three

UnimplementedError
#0      _DateFormatPatternField.formatTimeZone (package:intl/src/intl/date_format_field.dart:640:5)
#1      _DateFormatPatternField.formatField (package:intl/src/intl/date_format_field.dart:381:16)
#2      _DateFormatPatternField.format (package:intl/src/intl/date_format_field.dart:244:12)
#3      DateFormat.format (package:intl/src/intl/date_format.dart:276:26)
#4      main (file:///Users/benbutterworth/datetime/bin/datetime.dart:11:16)
<asynchronous suspension>
#5      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:299:32)
#6      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

最后我找到了如下解决方法

 String getUTCDate() {
    try {
      var f = DateFormat('E, d MMM yyyy HH:mm:ss');
      var now = DateTime.now().toUtc();
      return f.format(now) + ' GMT';
    } catch (e) {
      print('Error ******' + e.toString());
      throw e;
    }
  }