Flutter에서 showTimePicker
를 사용하여 한국 시간으로 표시하려면 기본적으로 TimeOfDay
객체를 DateTime
으로 변환한 후, 한국 시간대 (Asia/Seoul
)로 변경하여 표시하면 됩니다. 예제 코드로 한국 시간을 표시하는 방법을 보여드리겠습니다.
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TimePickerExample(),
);
}
}
class TimePickerExample extends StatefulWidget {
@override
_TimePickerExampleState createState() => _TimePickerExampleState();
}
class _TimePickerExampleState extends State<TimePickerExample> {
TimeOfDay? _selectedTime;
String? _formattedTimeInKST;
Future<void> _selectTime(BuildContext context) async {
final TimeOfDay? pickedTime = await showTimePicker(
context: context,
initialTime: _selectedTime ?? TimeOfDay.now(),
);
if (pickedTime != null && pickedTime != _selectedTime) {
setState(() {
_selectedTime = pickedTime;
// 선택한 TimeOfDay 객체를 DateTime 객체로 변환
final now = DateTime.now();
final DateTime selectedDateTime = DateTime(
now.year,
now.month,
now.day,
pickedTime.hour,
pickedTime.minute,
);
// 한국 시간대 포맷 설정 (Asia/Seoul)
final DateFormat formatter = DateFormat('HH:mm', 'ko_KR');
_formattedTimeInKST = formatter.format(selectedDateTime.toUtc().add(Duration(hours: 9)));
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Flutter showTimePicker 한국시간 예제')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_selectedTime == null
? '시간을 선택하지 않음'
: '선택한 시간 (KST): $_formattedTimeInKST',
style: TextStyle(fontSize: 20),
),
ElevatedButton(
onPressed: () => _selectTime(context),
child: Text('시간 선택'),
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TimePickerExample(),
);
}
}
class TimePickerExample extends StatefulWidget {
@override
_TimePickerExampleState createState() => _TimePickerExampleState();
}
class _TimePickerExampleState extends State<TimePickerExample> {
TimeOfDay? _selectedTime;
String? _formattedTimeInKST;
Future<void> _selectTime(BuildContext context) async {
final TimeOfDay? pickedTime = await showTimePicker(
context: context,
initialTime: _selectedTime ?? TimeOfDay.now(),
);
if (pickedTime != null && pickedTime != _selectedTime) {
setState(() {
_selectedTime = pickedTime;
// 선택한 TimeOfDay 객체를 DateTime 객체로 변환
final now = DateTime.now();
final DateTime selectedDateTime = DateTime(
now.year,
now.month,
now.day,
pickedTime.hour,
pickedTime.minute,
);
// 한국 시간대 포맷 설정 (Asia/Seoul)
final DateFormat formatter = DateFormat('HH:mm', 'ko_KR');
_formattedTimeInKST = formatter.format(selectedDateTime.toUtc().add(Duration(hours: 9)));
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Flutter showTimePicker 한국시간 예제')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_selectedTime == null
? '시간을 선택하지 않음'
: '선택한 시간 (KST): $_formattedTimeInKST',
style: TextStyle(fontSize: 20),
),
ElevatedButton(
onPressed: () => _selectTime(context),
child: Text('시간 선택'),
),
],
),
),
);
}
}
import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: TimePickerExample(), ); } } class TimePickerExample extends StatefulWidget { @override _TimePickerExampleState createState() => _TimePickerExampleState(); } class _TimePickerExampleState extends State<TimePickerExample> { TimeOfDay? _selectedTime; String? _formattedTimeInKST; Future<void> _selectTime(BuildContext context) async { final TimeOfDay? pickedTime = await showTimePicker( context: context, initialTime: _selectedTime ?? TimeOfDay.now(), ); if (pickedTime != null && pickedTime != _selectedTime) { setState(() { _selectedTime = pickedTime; // 선택한 TimeOfDay 객체를 DateTime 객체로 변환 final now = DateTime.now(); final DateTime selectedDateTime = DateTime( now.year, now.month, now.day, pickedTime.hour, pickedTime.minute, ); // 한국 시간대 포맷 설정 (Asia/Seoul) final DateFormat formatter = DateFormat('HH:mm', 'ko_KR'); _formattedTimeInKST = formatter.format(selectedDateTime.toUtc().add(Duration(hours: 9))); }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Flutter showTimePicker 한국시간 예제')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( _selectedTime == null ? '시간을 선택하지 않음' : '선택한 시간 (KST): $_formattedTimeInKST', style: TextStyle(fontSize: 20), ), ElevatedButton( onPressed: () => _selectTime(context), child: Text('시간 선택'), ), ], ), ), ); } }
설명
- TimeOfDay -> DateTime 변환:
TimeOfDay
객체를 사용자의 현지 날짜와 결합하여DateTime
으로 변환합니다. - UTC -> KST 변환:
DateTime.toUtc().add(Duration(hours: 9))
를 통해 한국 시간(KST)으로 변환합니다. - 형식화 및 출력:
intl
패키지의DateFormat
을 사용하여 24시간제 포맷(예: HH:mm)으로 포맷팅하여 한국 시간대에 맞게 표시합니다.
이 예제에서는 사용자가 선택한 시간을 한국 시간대에 맞춰 표시합니다. intl
패키지가 필요하므로, pubspec.yaml
에 추가해야 합니다:
dependencies:
flutter:
sdk: flutter
intl: ^0.17.0
dependencies:
flutter:
sdk: flutter
intl: ^0.17.0
dependencies: flutter: sdk: flutter intl: ^0.17.0