如何在 Dart 中将日期/时间字符串转换为 DateTime 对象?

假设我有一根绳子

"1974-03-20 00:00:00.000"

它是使用 DateTime.now()创建的, 如何将字符串转换回 DateTime对象?

129783 次浏览

DateTime有一个 parse方法

var parsedDate = DateTime.parse('1974-03-20 00:00:00.000');

Https://api.dartlang.org/stable/dart-core/datetime/parse.html

似乎有一个关于将时间戳字符串解析为 DateTime很多问题。我将尽量给出一个更笼统的答案,以便今后的问题可以直接在这里提出。

  • 您的时间戳是 ISO 格式的。 例子: 1999-04-231999-04-23 13:45:56Z19990423T134556.789。在这种情况下,可以使用 DateTime.parseDateTime.tryParse。(有关允许输入的精确设置,请参阅 DateTime.parse文档。)

  • 时间戳在 标准 HTTP 格式中。 示例: Fri, 23 Apr 1999 13:45:56 GMTFriday, 23-Apr-99 13:45:56 GMTFri Apr 23 13:45:56 1999。在这种情况下,可以使用 dart:ioHttpDate.parse函数。

  • 您的时间戳是某种本地格式的。 例子: 23/4/19994/23/99April 23, 1999。您可以使用 package:intlDateFormat类并提供一个指定如何解析字符串的 模式:

    import 'package:intl/intl.dart';
    
    
    ...
    
    
    var dmyString = '23/4/1999';
    var dateTime1 = DateFormat('d/M/y').parse(dmyString);
    
    
    var mdyString = '04/23/99';
    var dateTime2 = DateFormat('MM/dd/yy').parse(mdyString);
    
    
    var mdyFullString = 'April 23, 1999';
    var dateTime3 = DateFormat('MMMM d, y', 'en_US').parse(mdyFullString));
    

    有关模式语法的更多信息,请参见 DateFormat文件

    DateFormat限制:

  • 最后一招: 如果您的时间戳是固定的、已知的、数字格式,您总是可以使用正则表达式手动解析它们:

    var dmyString = '23/4/1999';
    
    
    var re = RegExp(
    r'^'
    r'(?<day>[0-9]{1,2})'
    r'/'
    r'(?<month>[0-9]{1,2})'
    r'/'
    r'(?<year>[0-9]{4,})'
    r'$',
    );
    
    
    var match = re.firstMatch(dmyString);
    if (match == null) {
    throw FormatException('Unrecognized date format');
    }
    
    
    var dateTime4 = DateTime(
    int.parse(match.namedGroup('year')!),
    int.parse(match.namedGroup('month')!),
    int.parse(match.namedGroup('day')!),
    );
    

    另一个例子见 https://stackoverflow.com/a/63402975/

    (我提到为了完整性使用正则表达式。这种方法还有很多失败的地方,所以我推荐 没有,除非别无选择。DateFormat通常应该足够了。)

我通过在 C # 服务器端创建这个属性来解决这个问题:

using Newtonsoft.Json.Converters;


public class DartDateTimeConverter : IsoDateTimeConverter
{
public DartDateTimeConverter()
{
DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFK";
}
}

我是这样使用它的:

[JsonConverter(converterType: typeof(DartDateTimeConverter))]
public DateTimeOffset CreatedOn { get; set; }

在内部,精度是存储的,但 Dart 应用程序使用它得到一个 ISO8601格式与正确的精度。

高温

import 'package:intl/intl.dart';


DateTime brazilianDate = new DateFormat("dd/MM/yyyy").parse("11/11/2011");

void main() {
  

var dateValid = "30/08/2020";
  

print(convertDateTimePtBR(dateValid));
  

}


DateTime convertDateTimePtBR(String validade)
{
DateTime parsedDate = DateTime.parse('0001-11-30 00:00:00.000');
  

List<String> validadeSplit = validade.split('/');
  

if(validadeSplit.length > 1)
{
String day = validadeSplit[0].toString();
String month = validadeSplit[1].toString();
String year = validadeSplit[2].toString();
    

parsedDate = DateTime.parse('$year-$month-$day 00:00:00.000');
}
 

return parsedDate;
}


你可以直接使用: DateTime.parse("your date string");

对于任何额外的格式,您可以使用“ Intl”包。

可以使用 Dart 默认函数 DateTime.parse("string");将字符串解析为 DateTime 对象

final parsedDate = DateTime.parse("1974-03-20 00:00:00.000");

飞镖垫实例

enter image description here