dart 如何使用UTC时区偏移格式化DateTime?

qaxu7uf2  于 2023-11-14  发布在  其他
关注(0)|答案(5)|浏览(98)

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

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。我应该使用哪种格式?

t3irkdon

t3irkdon1#

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

  • 添加intl
  • 使用import 'package:intl/intl.dart';将其导入到文件
  • 编写以下代码:
var dateTime = DateTime.now();
var val      = DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(dateTime);
var offset   = dateTime.timeZoneOffset;
var hours    = offset.inHours > 0 ? offset.inHours : 1; // For fixing divide by 0

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);

字符串

yqlxgs2m

yqlxgs2m2#

这是什么日期格式?
2020-03-26T00:57:08.000+08:00
这种日期时间格式遵循RFC 3339标准,更一般地说是ISO 8601标准。字母“T”被称为时间指示符。“+08:00”被称为UTC时区偏移。
我想有一个日期格式[.],其中有+08:00后面
您可以将UTC小时和分钟偏移附加到日期时间:

// import 'package:intl/intl.dart' as intl show DateFormat;

void main() {
  DateTime now = DateTime.now();
  Duration offset = now.timeZoneOffset;

  // ----------
  String dateTime = now.toIso8601String();
  // - or -
  // String dateTime = intl.DateFormat("yyyy-MM-dd'T'HH:mm:ss").format(now);
  // ----------
  String utcHourOffset = (offset.isNegative ? '-' : '+') +
    offset.inHours.abs().toString().padLeft(2, '0');
  String utcMinuteOffset = (offset.inMinutes - offset.inHours * 60)
    .toString().padLeft(2, '0');

  String dateTimeWithOffset = '$dateTime$utcHourOffset:$utcMinuteOffset';
  print(dateTimeWithOffset);
}

字符串
我正在使用DateFormat类
DateFormat(https://api.flutter.dev/flutter/intl/DateFormat-class.html)不会格式化UTC时区偏移量。虽然文档中的字母“Z”似乎提供了UTC时区偏移量,但它是保留的,您不能使用DateFormat("Z"),因为它会引发未实现的错误(https://api.flutter.dev/flutter/dart-core/UnimplementedError-class.html)。请注意,“Z”(发音为“zulu”)代表零子午线时间,UTC时区偏移量为+0:00。

xwbd5t1u

xwbd5t1u3#

这是什么类型的日期格式?
此格式为UTC +时区偏移。
+08:00是已经添加的时区偏移。
似乎DateTime不包含时区信息,因此,您无法在特定时区中创建DateTime。只有系统的时区和UTC可用。
DateTime支持时区偏移来进行解析,但将其规范化为UTC或本地时间。
因此,由于这是UTC,您可能可以使用toUtctoLocal对其进行格式化,并且接收方将能够解析它。
也就是说,你可以简单地像这样解析它:

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

字符串

nlejzf6q

nlejzf6q4#

使用方法toLocal()toUtc()获取在其他时区中指定的等效日期/时间值
阅读更多https://api.flutter.dev/flutter/dart-core/DateTime-class.html

muk1a3rh

muk1a3rh5#

我试过了,
使用package:intl:^0.17.0

Text(DateFormat.yMMMd().add_jm().format(<your date format for e.g. 2022-09-08T19:20:40.650367+05:30>.toLocal())

字符串
输出量:

Sep 8, 2022 7:20 PM

相关问题