[flutter] 플러터에서 날짜와 시간을 지정된 타임존으로 변환하는 방법

플러터 어플리케이션에서 특정 타임존에 해당하는 날짜와 시간을 표시하려면 dart:core 패키지의 DateTime 클래스를 사용하여 현지 시간을 표시한 후, intl 패키지의 DateFormat 클래스를 사용하여 타임존을 변환해야 합니다. 이를 위한 패키지를 설치하고, 코드를 통해 구체적인 예시를 살펴보겠습니다.

패키지 설치

먼저 pubspec.yaml 파일에 다음과 같이 intl 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  intl: ^0.17.0

그리고 패키지를 설치하기 위해 터미널에서 다음 명령을 실행합니다.

flutter pub get

예시 코드

다음은 현재 시간을 특정 타임존으로 변환하는 예시 코드입니다.

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    String localTimeZone = 'Asia/Seoul';
    DateTime now = DateTime.now();
    String formattedDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(now.toLocal());
    String convertedDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(now.toUtc().add(Duration(hours: getUtcOffset(localTimeZone))));
    
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('시간 변환 예시'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('현지 시간: $formattedDate'),
              Text('지정된 타임존 시간: $convertedDate'),
            ],
          ),
        ),
      ),
    );
  }

  int getUtcOffset(String location) {
    DateTime now = DateTime.now();
    Duration offset = now.timeZoneOffset;
    return DateTime.parse(now.toString()).timeZoneOffset.inHours;
  }
}

위 코드에서는 intl 패키지의 DateFormat 클래스를 사용하여 현지 시간을 특정 형식의 문자열로 변환하고, toUtc()add() 메서드를 사용하여 특정 타임존으로 변환된 날짜 및 시간을 계산합니다. 또한, getUtcOffset 함수를 사용하여 특정 타임존의 UTC 오프셋을 계산합니다.

이제 위의 코드를 실행하면 현지 시간과 특정 타임존의 시간을 보여주는 간단한 플러터 어플리케이션이 구현될 것입니다.

결론

intl 패키지를 사용하여 플러터 어플리케이션에서 날짜 및 시간을 특정 타임존으로 변환하는 방법을 살펴보았습니다. 이를 통해 사용자의 현지 시간이 아닌 특정 지역의 시간을 보여주는 어플리케이션을 개발할 수 있습니다.