DEV/Flutter

[Flutter] 날짜 문자열을 원하는 포맷으로 바꾸기 DateFormat & 숫자 3자리마다 콤마 넣기 NumberFormat

베이비코더 2024. 2. 26. 15:48
반응형

Flutter에서 DateFormat 클래스를 사용하려면 intl 패키지를 설치해줘야 한다.

https://pub.dev/packages/intl

 

intl | Dart package

Contains code to deal with internationalized/localized messages, date and number formatting and parsing, bi-directional text, and other internationalization issues.

pub.dev

 

DateFormat 이외에도 NumberFormat, BidiFormatter 클래스도 여기에 들어있다.

pubspec.yaml

dependencies:
  intl: ^0.19.0

최신 버전으로 추가해 준다.

 

DateFormatDateTime 타입의 값을 원하는 포맷으로 변경 가능하다.

DateTime은 자바의 Date 클래스와 유사한 클래스라고 보면 된다.

string_utils.dart

문자열을 가지고 이것저것 할 함수들을 모아 둘 string_utils.dart 안에 DateFormat 함수를 만들었다.

import 'package:intl/intl.dart';

String formatDate(String dateString) {
  DateTime dateTime = DateTime.parse(dateString);
  String formattedDateString = DateFormat('yyyy.MM.dd').format(dateTime);
  return formattedDateString;
}

받아온 dateString을 DateTime 타입으로 바꿔주고(파싱),
'yyyy.MM.dd' 포맷으로 변경한 문자열 값을 다시 반환한다.

Text('입사일 : ${formatDate(e.jncmpYmd)}'),
Text('생년월일 : ${formatDate(e.birthYmd)}'),

화면에 적용해 보면

다른 화면에서는 다른 포맷으로 쓰일 수 있으니까 메서드를 수정해 보자

import 'package:intl/intl.dart';

String formatDate(String dateString, String format) {
  DateTime dateTime = DateTime.parse(dateString);
  String formattedDateString = DateFormat(format).format(dateTime);
  return formattedDateString;
}
Text(
    '입사일 : ${formatDate(e.jncmpYmd, "yyyy/MM/dd")}'),
Text(
    '생년월일 : ${formatDate(e.birthYmd, "yyyy/MM/dd")}'),

NumberFormat

intl 패키지로 사용할 수 있는 NumberFormat 클래스도 써보자.

가격 문자열에 3자리마다 , 콤마를 넣어주는 함수 formatPricestring_utils.dart에 만들었다.

import 'package:intl/intl.dart';

String formatPrice(int price) {
  final formatter = NumberFormat("#,###", "ko_KR");
  return formatter.format(price);
}

100000 숫자 데이터가 들어오면 100,000 문자열로 반환해 준다.

반응형