Daniel Mana
Daniel Mana

Reputation: 10421

How do I convert a date/time string to a DateTime object in Dart?

Say I have a string

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

It is created using DateTime.now(), how do I convert the string back to a DateTime object?

Upvotes: 166

Views: 188823

Answers (9)

jamesdlin
jamesdlin

Reputation: 90015

There seem to be a lot of questions about parsing timestamp strings into DateTime. I will try to give a more general answer so that future questions can be directed here.

  • Your timestamp is in an ISO format. Examples: 1999-04-23, 1999-04-23 13:45:56Z, 19990423T134556.789. In this case, you can use DateTime.parse or DateTime.tryParse. (See the DateTime.parse documentation for the precise set of allowed inputs.)

  • Your timestamp is in a standard HTTP format. Examples: Fri, 23 Apr 1999 13:45:56 GMT, Friday, 23-Apr-99 13:45:56 GMT, Fri Apr 23 13:45:56 1999. In this case, you can use dart:io's HttpDate.parse function.

  • Your timestamp is in some local format. Examples: 23/4/1999, 4/23/99, April 23, 1999. You can use package:intl's DateFormat class and provide a pattern specifying how to parse the string:

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

    See the DateFormat documentation for more information about the pattern syntax.

    DateFormat limitations:

  • Your timestamp is in a fixed, known, numeric format. Examples: 19990423, 04-23-1999. You can use package:convert's FixedDateTimeFormatter and provide a pattern specifying how to parse the string:

    import 'package:convert/convert.dart';
    
    ...
    
    var dateString = '19990423';
    var dateTime = FixedDateTimeFormatter ('YYYYMMDD').decode(dateString);
    

    (Note that FixedDateTimeFormatter and DateFormat use different patterns.)

    As a last resort, you always use regular expressions to parse such strings manually:

    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')!),
    );
    

    See https://stackoverflow.com/a/63402975/ for another example.

    (I mention using regular expressions for completeness. There are many more points for failure with this approach, so I do not recommend it unless there's no other choice. DateFormat or FixedDateTimeFormatter usually should be sufficient.)

Upvotes: 104

Omar Khaled
Omar Khaled

Reputation: 181

All the previous answers are appreciated. However I would like to introduce the flutter_helper_utils package's helper method toDateTime and tryToDateTime which takes dynamic data and atemp to convert it into DateTime object (useful when dealing with API data like List or Map<String, dynamic>).

import 'package:flutter_helper_utils/flutter_helper_utils.dart';
final dateTime = toDateTime('12/11/2020'); // or tryToDateTime

// or specify an optional format and locale.
final dateTime = toDateTime('12/11/2020', format: 'yyyy-MM-dd', locale: 'en_US');

// or if the global method name conflicts with any of your methods.
final dateTime = ConvertObject.toDateTime('12/11/2020');

both global methods and static ones behaves the same.

it also contains a lot of useful conversion methods and extensions.

you can check its documentation website here

Upvotes: 0

AIYUUU033119
AIYUUU033119

Reputation: 1

String dateFormatter(date) {

date = date.split('-'); DateFormat dateFormat = DateFormat("yMMMd"); String format = dateFormat.format(DateTime(int.parse(date[0]), int.parse(date[1]), int.parse(date[2]))); return format; }

Upvotes: 0

Javeed Ishaq
Javeed Ishaq

Reputation: 7105

a string can be parsed to DateTime object using Dart default function DateTime.parse("string");

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

Example on Dart Pad

enter image description here

Upvotes: 3

akash maurya
akash maurya

Reputation: 656

you can just use : DateTime.parse("your date string");

for any extra formating, you can use "Intl" package.

Upvotes: 4


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

Upvotes: 2

Bruno Camargos
Bruno Camargos

Reputation: 327

import 'package:intl/intl.dart';

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

Upvotes: 9

Bill Noel
Bill Noel

Reputation: 1150

I solved this by creating, on the C# server side, this attribute:

using Newtonsoft.Json.Converters;

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

and I use it like this:

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

Internally, the precision is stored, but the Dart app consuming it gets an ISO8601 format with the right precision.

HTH

Upvotes: -5

G&#252;nter Z&#246;chbauer
G&#252;nter Z&#246;chbauer

Reputation: 657496

DateTime has a parse method

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

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

Upvotes: 274

Related Questions