Flutter/Dart - 날짜 문자열을 DateTime으로 변환

날짜 정보를 갖고 있는 문자열을 파싱하여 DateTime 객체로 변환하는 방법을 소개합니다.

1. DateTime.parse()를 이용한 방법

DateTime.parse()는 인자로 전달된 시간 문자열을 DateTime 객체로 변환합니다.

void main() {

    String str = "2022-12-05 20:09:14.322471";
    DateTime dt = DateTime.parse(str);
    print(dt);
}

Output:

2022-12-05 20:09:14.322471

1.1 다양한 형식의 문자열 파싱

문자열에 모든 시간 정보가 없어도 변환이 됩니다. 기본적으로 아래와 같은 문자열 형식은 모두 파싱되고 DateTime으로 변환됩니다.

void main() {

    String str = "2022-12-05 20:09:14.322471";
    print(DateTime.parse(str));

    str = "2022-12-05 20:09:14";
    print(DateTime.parse(str));

    str = "2022-12-05 20:09";
    print(DateTime.parse(str));

    str = "2022-12-05 20";
    print(DateTime.parse(str));

    str = "2022-12-05";
    print(DateTime.parse(str));

    str = "2022-12-05T14Z";
    print(DateTime.parse(str));

    str = "20221205";
    print(DateTime.parse(str));
}

Output:

2022-12-05 20:09:14.322471
2022-12-05 20:09:14.000
2022-12-05 20:09:00.000
2022-12-05 20:00:00.000
2022-12-05 00:00:00.000
2022-12-05 14:00:00.000Z
2022-12-05 00:00:00.000

1.2 잘못된 날짜 형식, FormatException 에러

아래와 같은 날짜, 시간 형식의 문자열은 지원되지 않으며, 파싱 중 에러가 발생합니다.

기본 형식이 아닌 문자열은 DateFormat을 이용하여 파싱할 수 있습니다. 자세한 것은 아래에서 소개합니다.

void main() {

    String str = "2022/12/05";
    print(DateTime.parse(str));

    str = "2022 12 05";
    print(DateTime.parse(str));
}

Output:

Unhandled exception:
FormatException: Invalid date format
2022/12/05
#0      DateTime.parse (dart:core/date_time.dart:347:7)

2. DateTime.tryParse()를 이용한 방법

DateTime.tryParse()DateTime.parse()와 동일하게 문자열을 파싱하여 DateTime으로 변환합니다.

차이점은, 잘못된 형식의 문자열 파싱했을 때 DateTime.tryParse()는 null을 리턴하며 예외를 발생시키지 않습니다. 반면에 DateTime.parse()는 예외를 발생시키며, 예외 처리가 되어있지 않으면 프로그램이 종료됩니다.

void main() {

    String str = "2022/12/05";
    print(DateTime.tryParse(str));
}

Output:

null

3. DateFormat()으로 Custom 날짜 문자열 파싱

DateFormat()을 이용하여 아래와 같이 원하는 날짜 형식의 문자열을 파싱하여 DateTime 객체로 변환할 수 있습니다.

  • DateFormat을 사용하려면 package:intl/intl.dart를 import해야 함
  • DateFormat('yyyy/MM/dd').parse(str)와 같은 패턴을 사용
  • Format에 지정한 날짜, 시간이 문자열에 없으면 Exception 발생
import 'package:intl/intl.dart';

void main() {

    String str = "2022/12/05 10:15:30";
    DateTime dt = DateFormat('yyyy/MM/dd').parse(str);
    print(dt);

    str = "2022년 12월 05일 10:15:30";
    dt = DateFormat('yyyy년 MM월 dd일 HH:mm:ss').parse(str);
    print(dt);

    str = "2022年12月05日";
    dt = DateFormat('yyyy年MM月dd日').parse(str);
    print(dt);
}

Output:

2022-12-05 00:00:00.000
2022-12-05 10:15:30.000
2022-12-05 00:00:00.000

아래와 같이 Format에 지정한 날짜, 시간이 문자열에 없으면 Exception 발생합니다.

import 'package:intl/intl.dart';

void main() {

    String str = "2022/12/05";
    DateTime dt = DateFormat('yyyy/MM/dd HH:mm:ss').parse(str);
    print(dt);
}

Output:

FormatException: Trying to read   from 2022/12/05 at position 11
#0      _DateFormatField.throwFormatException
package:intl/…/intl/date_format_field.dart:86
#1      _DateFormatField.parseLiteral
package:intl/…/intl/date_format_field.dart:55
#2      _DateFormatLiteralField.parse
package:intl/…/intl/date_format_field.dart:99
#3      DateFormat._parse
package:intl/…/intl/date_format.dart:394
#4      DateFormat.parse
package:intl/…/intl/date_format.dart:325
#5      main
bin/dart_application_1.dart:6
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha