How to parse date time in flutter

10,956

Your problem is you are trying to parse "2020-07-17T03:18:31.177769-04:00" with the pattern "HH:mm a" which is impossible since the pattern are not even close to the provided string.

Instead, what you properly want is to parse your datetime string into a DateTime object and use your DateFormat to convert the DateTime into a String. Since your provided datetime string are formatted in a format which dart can parse out of the box, we can just use DateTime.parse.

An example on this can be seen here:

import 'package:intl/intl.dart';

void main() {
  const dateTimeString = '2020-07-17T03:18:31.177769-04:00';
  final dateTime = DateTime.parse(dateTimeString);

  final format = DateFormat('HH:mm a');
  final clockString = format.format(dateTime);

  print(clockString); // 07:18 AM
}

About the clock, it will by default parse the datetime into UTC if there are provided a timezone in the string like the example.

You can output local time by doing:

final clockString = format.format(dateTime.toLocal());

But this solution will of course only work if your own computer has the timezone offset "-04:00". But it will be the most correct solution since the inner state of the DateTime is correct.

If you want to parse the datetime string directly to local time I think the easiest way is to remove the timezone part of your datetime string like:

final dateTime = DateTime.parse(dateTimeString.replaceFirst(RegExp(r'-\d\d:\d\d'), ''));

This will give a DateTime object which contains local time and will print your timestamp as you want:

import 'package:intl/intl.dart';

void main() {
  const dateTimeString = '2020-07-17T03:18:31.177769-04:00';
  final dateTime =
      DateTime.parse(dateTimeString.replaceFirst(RegExp(r'-\d\d:\d\d'), ''));

  final format = DateFormat('HH:mm a');
  final clockString = format.format(dateTime);

  print(clockString); // 03:18 AM
}
Share:
10,956
Goku
Author by

Goku

serial up-voter/down-voter God Bless You keep patience karma will work

Updated on December 22, 2022

Comments

  • Goku
    Goku over 1 year

    I getting below date time from server

       "datetime":"2020-07-17T03:18:31.177769-04:00"
    

    and I'm using below code to parse to get time from above date

          var format = DateFormat('HH:mm a');
          debugPrint('LocalTime ${format.parse(timeZoneData.datetime)}');
    

    I'm getting below exception

    flutter: Error 123: FormatException: Trying to read : from 2020-07-17T03:22:09.959577-04:00 at position 5
    

    and i want display the above time like this 3:18 AM

    Can anybody know how can parse date time in flutter

    If need more information please do let me know. Thanks in advance. Your efforts will be appreciated.

  • Goku
    Goku almost 4 years
    Yes I'm getting 07:18 AM but my actual required is to get 03:18 AM, actually I'm using worldtimeapi to get time of different location
  • julemand101
    julemand101 almost 4 years
    Yes, I saw that requirement after posting my answer and I am working on a solution. :)