본문 바로가기
Dart/Dart Server

[추가학습] Dart 서버/ 서버 애플리케이션 국제화(i18n) 및 지역화(l10n)/ 날짜 및 시간 처리

by Maccrey Coding 2024. 10. 6.
728x90
반응형

 

Dart 서버 애플리케이션을 다국어 환경에서 사용할 때 중요한 요소 중 하나는 날짜 및 시간 포맷을 각 지역에 맞게 처리하는 것입니다.

이 글에서는 다국어 환경에서 날짜와 시간을 다루는 방법과 타임존(Timezone)을 처리하는 방법을 다룰 것입니다.

초보자도 이해하기 쉽게 코드 예제를 통해 설명하겠습니다.

1. 다국어 환경에서 날짜 및 시간 포맷 처리 방법

1.1 intl 패키지로 날짜 및 시간 포맷팅

Dart에서 날짜와 시간을 다국어 환경에 맞게 표시하려면 intl 패키지를 사용합니다. 이 패키지를 이용하면 각 언어와 국가에 맞는 날짜, 시간 형식을 쉽게 적용할 수 있습니다.

1.2 intl 패키지 설치하기

intl 패키지를 사용하기 위해선 프로젝트에 패키지를 설치해야 합니다. pubspec.yaml 파일에 다음을 추가합니다.

dependencies:
  intl: ^0.17.0

그리고 아래 명령어로 패키지를 설치합니다.

$ dart pub get

1.3 기본적인 날짜 포맷 예제

이제 다양한 지역에 맞는 날짜 형식을 다루는 코드를 작성해보겠습니다.

import 'package:intl/intl.dart';

void main() {
  var now = DateTime.now();
  
  // 미국 날짜 포맷 (영어)
  var usFormat = DateFormat.yMMMMd('en_US').format(now);
  
  // 한국 날짜 포맷 (한국어)
  var krFormat = DateFormat.yMMMMd('ko_KR').format(now);
  
  // 프랑스 날짜 포맷 (프랑스어)
  var frFormat = DateFormat.yMMMMd('fr_FR').format(now);
  
  print('US: $usFormat'); // 출력: US: October 6, 2024
  print('KR: $krFormat'); // 출력: KR: 2024년 10월 6일
  print('FR: $frFormat'); // 출력: FR: 6 octobre 2024
}

코드 설명

  1. DateTime.now(): 현재 시간을 가져옵니다.
  2. DateFormat.yMMMMd(): 날짜 형식을 설정합니다. yMMMMd()는 연도(Year), 월(Month), 일(Day)을 표시하는 포맷입니다. 괄호 안에 "en_US"(미국), "ko_KR"(한국), "fr_FR"(프랑스)를 지정하여 각 지역의 형식에 맞게 출력합니다.
  3. 출력 결과: 미국에서는 "October 6, 2024", 한국에서는 "2024년 10월 6일", 프랑스에서는 "6 octobre 2024"로 날짜가 다르게 표시됩니다.

1.4 시간 포맷 예제

이번에는 시간까지 포함하여 다국어 환경에서 시간 포맷을 다루는 방법을 보겠습니다.

import 'package:intl/intl.dart';

void main() {
  var now = DateTime.now();
  
  // 미국 시간 포맷 (영어)
  var usTimeFormat = DateFormat.jm('en_US').format(now); // 12-hour format
  
  // 한국 시간 포맷 (한국어)
  var krTimeFormat = DateFormat.Hm('ko_KR').format(now); // 24-hour format
  
  // 프랑스 시간 포맷 (프랑스어)
  var frTimeFormat = DateFormat.Hm('fr_FR').format(now); // 24-hour format
  
  print('US Time: $usTimeFormat'); // 출력: US Time: 10:30 PM
  print('KR Time: $krTimeFormat'); // 출력: KR Time: 22:30
  print('FR Time: $frTimeFormat'); // 출력: FR Time: 22:30
}

코드 설명

  1. DateFormat.jm(): 12시간 형식으로 시간을 포맷합니다(미국). 예: 10:30 PM.
  2. DateFormat.Hm(): 24시간 형식으로 시간을 포맷합니다(한국, 프랑스). 예: 22:30.
  3. 출력 결과: 미국에서는 12시간 형식, 한국과 프랑스에서는 24시간 형식으로 시간이 출력됩니다.

2. Dart에서 타임존(Timezone) 처리하기

2.1 타임존(Timezone)이란?

타임존은 각 지역의 표준 시간대를 의미합니다. 전 세계에서 시간대가 다르기 때문에 서버 애플리케이션에서는 사용자의 시간대에 맞춰 시간 정보를 제공해야 합니다.

Dart는 UTC(협정 세계시)를 기본 시간대로 사용하지만, 특정 타임존에 맞춘 시간을 처리하려면 timezone 패키지를 사용할 수 있습니다.

2.2 timezone 패키지 설치하기

타임존을 처리하기 위해 timezone 패키지를 설치합니다. pubspec.yaml 파일에 추가합니다.

dependencies:
  timezone: ^0.8.0

그리고 아래 명령어로 패키지를 설치합니다.

$ dart pub get

2.3 타임존 설정 및 사용

타임존을 설정하고 사용하는 기본 예제를 작성해보겠습니다.

import 'package:timezone/data/latest.dart' as tz;
import 'package:timezone/timezone.dart' as tz;

void main() {
  // 타임존 데이터 초기화
  tz.initializeTimeZones();
  
  // 뉴욕 타임존 설정
  var newYork = tz.getLocation('America/New_York');
  var nyTime = tz.TZDateTime.now(newYork);
  
  // 서울 타임존 설정
  var seoul = tz.getLocation('Asia/Seoul');
  var seoulTime = tz.TZDateTime.now(seoul);
  
  print('New York Time: $nyTime'); // 출력: New York Time: 2024-10-06 08:30:00.000-0400
  print('Seoul Time: $seoulTime'); // 출력: Seoul Time: 2024-10-06 21:30:00.000+0900
}

코드 설명

  1. initializeTimeZones(): Dart에서 타임존 데이터를 초기화합니다. 이 함수는 모든 타임존 정보를 사용할 수 있게 해줍니다.
  2. getLocation('America/New_York'): America/New_York 타임존을 가져옵니다. 이는 뉴욕의 시간대를 의미합니다.
  3. TZDateTime.now(newYork): 뉴욕 타임존에 맞춘 현재 시간을 가져옵니다.
  4. 서울 타임존: 비슷한 방식으로 서울 타임존(Asia/Seoul)의 현재 시간도 가져올 수 있습니다.

이 코드를 통해 뉴욕과 서울의 현재 시간을 각각 다른 타임존 기준으로 표시할 수 있습니다.

2.4 UTC와 타임존 변환

애플리케이션에서는 종종 UTC 시간을 기준으로 처리한 후 특정 타임존으로 변환해야 할 때가 있습니다. 아래는 UTC 시간을 타임존으로 변환하는 예제입니다.

import 'package:timezone/data/latest.dart' as tz;
import 'package:timezone/timezone.dart' as tz;

void main() {
  // 타임존 데이터 초기화
  tz.initializeTimeZones();
  
  // UTC 시간 가져오기
  var utcTime = tz.TZDateTime.now(tz.UTC);
  
  // UTC 시간을 서울 시간으로 변환
  var seoul = tz.getLocation('Asia/Seoul');
  var seoulTime = tz.TZDateTime.from(utcTime, seoul);
  
  print('UTC Time: $utcTime'); // 출력: UTC Time: 2024-10-06 12:30:00.000Z
  print('Seoul Time: $seoulTime'); // 출력: Seoul Time: 2024-10-06 21:30:00.000+0900
}

코드 설명

  1. TZDateTime.now(tz.UTC): 현재 UTC 시간을 가져옵니다.
  2. TZDateTime.from(utcTime, seoul): UTC 시간을 서울 타임존으로 변환합니다.

이 방법을 통해 서버에서 모든 시간을 UTC로 처리하고, 사용자의 타임존에 맞게 변환할 수 있습니다.

 

다국어 환경에서 날짜와 시간 포맷을 처리하고, 다양한 타임존을 다루는 것은 글로벌 애플리케이션을 개발할 때 매우 중요한 부분입니다.

Dart에서는 intl 패키지로 손쉽게 날짜와 시간을 지역화할 수 있으며, timezone 패키지를 사용해 타임존을 다룰 수 있습니다.

이를 통해 Dart 서버 애플리케이션에서 전 세계 사용자들에게 정확한 시간 정보를 제공할 수 있습니다.

구독!! 공감과 댓글,

광고 클릭은 저에게 큰 힘이 됩니다.

 

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

728x90
반응형