날짜 정보를 갖고 있는 문자열을 파싱하여 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
- Flutter/Dart - Future.delayed() 사용 방법
- Flutter/Dart - Stream 사용 방법
- Flutter/Dart - 파일, 디렉토리 삭제
- Flutter/Dart - 텍스트 파일 쓰기
- Flutter/Dart - 반복문 (for, while, for-in, forEach)
- Flutter/Dart - Static 변수, 메소드 선언
- Flutter/Dart - 텍스트 파일 읽기
- Flutter/Dart - 다양한 Null 체크 방법
- Flutter/Dart - Double을 Int로 변환
- Flutter/Dart - Double을 String으로 변환
- Flutter/Dart - String을 Double로 변환
- Flutter/Dart - String을 List로 변환
- Flutter/Dart - String에서 특정 문자열 Index 찾기
- Flutter/Dart - String 길이(length)
- Flutter/Dart - 몇 초 지연시키기, sleep
- Flutter/Dart - 날짜 계산, 년/월/일 더하고 빼기
- Flutter/Dart - 날짜 문자열을 DateTime으로 변환
- Flutter/Dart - 현재 시간 가져오기, DateTime
- Flutter/Dart - Map에 key-value 추가
- Flutter/Dart - Map 순회 방법
- Flutter/Dart - Map 선언 및 초기화
- Flutter/Dart - Map에서 Entry(key-value) 제거
- Flutter/Dart - key, value로 Map 정렬
- Flutter/Dart - 리스트 복사 방법
- Flutter/Dart - 리스트 합치는 방법
- Flutter/Dart - 리스트 최대값, 최소값 찾기
- Flutter/Dart - 리스트 요소 추가, 특정 위치 추가
- Flutter/Dart - 리스트 요소 제거
- Flutter/Dart - 리스트 합계, 평균 계산
- Flutter/Dart - 리스트 요소 값 변경, 찾기
- Flutter/Dart - 리스트 중복 제거
- Flutter/Dart - 리스트 정렬 (오름차순, 내림차순)
- Flutter/Dart - 리스트 자르기, 분리하기
- Flutter/Dart - 변수 타입 체크
- Flutter/Dart - 리스트 필터링