我如何在颤动中像这样 2019-07-08T10:37:28Z 格式化日期
Posted
技术标签:
【中文标题】我如何在颤动中像这样 2019-07-08T10:37:28Z 格式化日期【英文标题】:How do i format date like this 2019-07-08T10:37:28Z in flutter 【发布时间】:2020-03-07 23:30:40 【问题描述】:我想像 2019-07-08T10:37:28Z
这样格式化日期,但我不知道该怎么做,谁能帮我解决这个问题。
这是日期选择器的代码
final format = new DateFormat.yMMMEd('en-US');
return DateTimeField(
format: format,
autocorrect: true,
autovalidate: false,
controller: _bspLicenseExpiryDate,
readOnly: true,
validator: (date) => date == null ? 'Please enter valid date' : null,
decoration: InputDecoration(
labelText: "Expiry Date",
hintText: "Expiry Date",
prefixIcon: Icon(
FontAwesomeIcons.calendar,
size: 24,
)),
onShowPicker: (context, currentValue)
return showDatePicker(
context: context,
firstDate: DateTime.now(),
initialDate: currentValue ?? DateTime.now(),
lastDate: DateTime(2100),
);
,
);
【问题讨论】:
DateTime
有一个 .toIso8601String()
方法,但它会打印小数秒。试试print(DateTime.now().toUtc().toIso8601String());
【参考方案1】:
你可以用这个:
var now = new DateTime.now();
var dateFormatted = DateFormat("yyyy-MM-ddTHH:mm:ss").format(now);
您必须在字符串末尾添加“Z”,因为它是用于格式化 TimeZone 的 Char。
你可以在那里查看 -> https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html
【讨论】:
您可以/应该引用非格式字符 - 这允许您添加 Z。var dateFormatted = DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(DateTime.now());
@Caffo17 "Z" 表示表示的时间是UTC!【参考方案2】:
你可以参考这里的 DateFormat 类https://api.flutter.dev/flutter/intl/DateFormat-class.html 它有一个构造函数,你可以在其中放置你的模式。
final format = new DateFormat('yyyy-MM-ddTHH:mm:ssZ','en-US');
【讨论】:
【参考方案3】:它是UTC
类型的ISO 8601 格式日期时间。
下面的方法来解析这个日期格式,如果有异常则返回今天的默认值:
String formatDateTimeFromUtc(dynamic time)
try
return new DateFormat("yyyy-MM-dd hh:mm:ss").format(new DateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(time));
catch (e)
return new DateFormat("yyyy-MM-dd hh:mm:ss").format(new DateTime.now());
【讨论】:
以上是关于我如何在颤动中像这样 2019-07-08T10:37:28Z 格式化日期的主要内容,如果未能解决你的问题,请参考以下文章