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

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

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

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

字符串
我正在使用DateFormat

  1. DateTime dateTime = DateTime.now();
  2. print(dateTime.toIso8601String());
  3. print(dateTime.toLocal());
  4. print(dateTime.toUtc());


输出

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


我想有一个日期格式,就像我显示的第一个输出一样,后面有+08:00。我应该使用哪种格式?

t3irkdon

t3irkdon1#

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

  • 添加intl
  • 使用import 'package:intl/intl.dart';将其导入到文件
  • 编写以下代码:
  1. var dateTime = DateTime.now();
  2. var val = DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(dateTime);
  3. var offset = dateTime.timeZoneOffset;
  4. var hours = offset.inHours > 0 ? offset.inHours : 1; // For fixing divide by 0
  5. if (!offset.isNegative) {
  6. val = val +
  7. "+" +
  8. offset.inHours.toString().padLeft(2, '0') +
  9. ":" +
  10. (offset.inMinutes % (hours * 60)).toString().padLeft(2, '0');
  11. } else {
  12. val = val +
  13. "-" +
  14. (-offset.inHours).toString().padLeft(2, '0') +
  15. ":" +
  16. (offset.inMinutes % (hours * 60)).toString().padLeft(2, '0');
  17. }
  18. print(val);

字符串

展开查看全部
yqlxgs2m

yqlxgs2m2#

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

  1. // import 'package:intl/intl.dart' as intl show DateFormat;
  2. void main() {
  3. DateTime now = DateTime.now();
  4. Duration offset = now.timeZoneOffset;
  5. // ----------
  6. String dateTime = now.toIso8601String();
  7. // - or -
  8. // String dateTime = intl.DateFormat("yyyy-MM-dd'T'HH:mm:ss").format(now);
  9. // ----------
  10. String utcHourOffset = (offset.isNegative ? '-' : '+') +
  11. offset.inHours.abs().toString().padLeft(2, '0');
  12. String utcMinuteOffset = (offset.inMinutes - offset.inHours * 60)
  13. .toString().padLeft(2, '0');
  14. String dateTimeWithOffset = '$dateTime$utcHourOffset:$utcMinuteOffset';
  15. print(dateTimeWithOffset);
  16. }

字符串
我正在使用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对其进行格式化,并且接收方将能够解析它。
也就是说,你可以简单地像这样解析它:

  1. 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

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

字符串
输出量:

  1. Sep 8, 2022 7:20 PM

相关问题