问题描述
如何在Dart中将当前时间转换为GMT / UTC时间,类似于javascript方法:new Date().toUTCString()
:
2011年11月1日,星期二,格林尼治标准时间
我尝试了以下几种格式化程序,但是没有用
//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,不含格林尼治标准时间
,将当前时间转换为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和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;
}
}