日期时间抖动格式

时间:2020-03-25 17:38:14

标签: datetime flutter dart

这是什么类型的日期格式?

2020-03-26T00:57:08.000+08:00

我使用DateFormat

 DateTime dateTime = DateTime.now();

 print(dateTime.toIso8601String());
 print(dateTime.toLocal());
 print(dateTime.toUtc());

输出

I/flutter (20667): 2020-03-26T01:34:20.826589
I/flutter (20667): 2020-03-26 01:34:20.826589
I/flutter (20667): 2020-03-25 17:34:20.826589Z

我希望有一个日期格式,如我显示的第一个输出,后面有+08:00。我应该使用哪个?

2 个答案:

答案 0 :(得分:2)

到目前为止,还没有直接的方法来获取这种日期格式。有一种解决方法。

  • 添加intl
  • 使用import 'package:intl/intl.dart';
  • 将其导入文件
  • 编写以下代码:

var dateTime = DateTime.now();
var val      = DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(dateTime);
// There is no timezone data associated with DateTime, so you have to use the following code to get the timezone info
var offset   = dateTime.timeZoneOffset;
var hours    = offset.inHours > 0 ? offset.inHours : 1; // For fixing divide by zero error
if (!offset.isNegative) {
  val = val + "+" + offset.inHours.toString().padLeft(2, '0') + ":" + (offset.inMinutes%(hours*60)).toString().padLeft(2, '0');
} else {
  val = val + offset.inHours.toString().padLeft(2, '0') + ":" + (offset.inMinutes%(hours*60)).toString().padLeft(2, '0');
}
print(val);

答案 1 :(得分:1)

这是什么类型的日期格式?

此格式为UTC +时区偏移。

该+08:00是已添加的时区偏移量。

似乎DateTime不包含时区信息,因此,您不能在特定时区中创建DateTime。仅系统时区和UTC可用。

还必须说DateTime支持解析时区偏移,但将其标准化为UTC或本地时间。

因此,由于这是UTC,您可能可以使用toUtctoLocal对其进行格式化,接收者将能够对其进行解析。

话虽如此,您可以像这样简单地解析它:

DateTime.parse("2020-03-26T00:57:08.000+08:00")