3

How would I either reformat, convert or extract just the date and time from this string in Dart/Flutter? The String comes from the default timestamp in my MySQL database;

2021-08-11T11:38:09.000Z

So what I need is something like this;

  2021-08-11 11:38

I was thinking perhaps something like;

final String? shortime = timestamp?.replaceAll(RegExp(''), '') ?? ''; 

But I'm not sure what to use as the regex.

Meggy
  • 1,491
  • 3
  • 28
  • 63

2 Answers2

3

you can use this code:

DateTime x = DateTime.parse("2021-08-11T11:38:09.000Z");

then create a function to check the input number:

String checkNum(int x){
   return x<10?"0${x}":x.toString();
}

now you can use this function as follow:

  print(checkNum(x.year));
  print(checkNum(x.month)); // and so on...

let me know if you had any related problems. here is an example: enter image description here.

Abbasihsn
  • 2,075
  • 1
  • 7
  • 17
  • Did you try the solution? It does not take into account that the date and time should be padded with 0 to the number is always two digits. – julemand101 Aug 12 '21 at 09:01
  • I will update my answer, thank you. – Abbasihsn Aug 12 '21 at 09:02
  • I actually used your first answer. The edited one gave this error; A value of type 'Object' can't be returned from the function 'checkNum' because it has a return type of 'String?'. – Meggy Aug 12 '21 at 09:11
  • @Meggy I edited my answer again (just missed () in front of toString!). Now you can have access to each parameter you want like (x.hour, x.minute, and so on), also checkNum function checks that return String always have two digits for example it returns "01" instead of "1" – Abbasihsn Aug 12 '21 at 09:18
  • @Meggy did it work? – Abbasihsn Aug 12 '21 at 09:29
  • I used your first answer. Android Studio gave this error on the function; A value of type 'Object' can't be returned from the function 'checkNum' because it has a return type of 'String? – Meggy Aug 12 '21 at 09:55
  • @meggy did you tried replacing x.toString with x.toString()? In checkNum function? – Abbasihsn Aug 12 '21 at 10:09
  • I think the problem is that x is not an integer. – Meggy Aug 12 '21 at 10:20
  • @Meggy I checked it again, it works in the dartpad. https://dartpad.dev/?null_safety=true – Abbasihsn Aug 12 '21 at 11:41
  • I'm not sure why but it didn't work in Android studio. At any rate your first answer worked. – Meggy Aug 12 '21 at 11:44
  • fine... so I think you can neglect `numCheck` function and do not use it... Could you use it as an acceptable solution? – Abbasihsn Aug 12 '21 at 11:51
3

Since the provided timestamp is supported by DateTime.parse you could do something like this:

void main() {
  final dateTime = DateTime.parse('2021-08-11T11:38:09.000Z');
  print(convertDateTimeToString(dateTime)); // 2021-08-11 11:38
}

String convertDateTimeToString(DateTime dt) => '${dt.year}-'
    '${dt.month.toString().padLeft(2, '0')}-'
    '${dt.day.toString().padLeft(2, '0')} '
    '${dt.hour.toString().padLeft(2, '0')}:'
    '${dt.minute.toString().padLeft(2, '0')}';

Alternative, you can use a package like intl which supports formatting DateTime using a formatting pattern:

import 'package:intl/intl.dart';

void main() {
  final dateTime = DateTime.parse('2021-08-11T11:38:09.000Z');
  final format = DateFormat('yyyy-MM-dd HH:mm');
  print(format.format(dateTime)); // 2021-08-11 11:38
}
julemand101
  • 28,470
  • 5
  • 52
  • 48