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

niknxzdl  于 2023-02-06  发布在  其他
关注(0)|答案(8)|浏览(264)

假设我有一根弦

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

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

eyh26e7m

eyh26e7m1#

DateTime有一个parse方法

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

https://api.dartlang.org/stable/dart-core/DateTime/parse.html

z18hc3ub

z18hc3ub2#

关于将时间戳字符串解析为DateTime,似乎有很多问题,我将尝试给予一个更一般的答案,以便将来的问题可以直接在这里讨论。

***您的时间戳采用ISO格式。**示例:1999-04-231999-04-23 13:45:56Z19990423T134556.789。在这种情况下,可以使用DateTime.parseDateTime.tryParse。(有关允许输入的精确设置,请参见the DateTime.parse documentation。)
***您的时间戳采用标准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类并提供一个指定如何解析字符串的 pattern

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

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

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通常应该足够了。)

ezykj2lf

ezykj2lf3#

import 'package:intl/intl.dart';

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

cotxawn74#

您可以只使用:* * 一月一日**
对于任何额外的格式化,您可以使用"Intl"包。

55ooxyrt

55ooxyrt5#

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;
}
jutyujz0

jutyujz06#

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

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

qc6wkl3g

qc6wkl3g7#

String dateFormatter(date) {

日期=日期.拆分('-');日期格式日期格式=日期格式(“yMMMd”);字符串格式=日期格式.format(日期时间(整数解析(日期[0]),整数解析(日期[1]),整数解析(日期[2])));返回格式}

kt06eoxx

kt06eoxx8#

我通过在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
高温加热

相关问题