Çapraz Platform Tarih Formatı: Yerel Ayarlara Uygun Parsing Kodu
Mobil uygulamada tarih gösterirken kullanıcının telefonunun dil ayarına uygun biçim göstermek gerekir. Türkiye'de 'gün/ay/yıl', ABD'de 'ay/gün/yıl' formatı beklenir. String olarak gelen tarihi doğru şekilde ayrıştırmak ve yerel ayarlara göre göstermek, çapraz platform geliştirmede sık karşılaşılan bir sorun.
Flutter'da intl paketini kullanarak bunu çözmek doğru. Sistem dilini otomatik algılayıp tarih formatını o dile göre ayarlıyor.
1import 'package:intl/intl.dart';2import 'package:flutter/material.dart';34void main() {5runApp(const MyApp());6}78class MyApp extends StatelessWidget {9const MyApp({Key? key}): super(key: key);1011@override12Widget build(BuildContext context) {13return MaterialApp(14localizationsDelegates: const [15GlobalMaterialLocalizations.delegate,16GlobalWidgetsLocalizations.delegate,17],18supportedLocales: const [19Locale('tr', 'TR'),20Locale('en', 'US'),21Locale('de', 'DE'),22],23home: const DateParseScreen(),24);25}26}2728class DateParseScreen extends StatelessWidget {29const DateParseScreen({Key? key}): super(key: key);3031@override32Widget build(BuildContext context) {33// Sistem dilini al34Locale locale = Localizations.localeOf(context);3536// String tarih (her zaman ISO formatında olmalı)37String dateString = '2024-03-15';38DateTime parsedDate = DateTime.parse(dateString);3940// Yerel formata göre göster41String formatted = DateFormat.yMMMd(locale.toString()).format(parsedDate);42String fullFormat = DateFormat.yMMMMEEEEd(locale.toString()).format(parsedDate);4344return Scaffold(45appBar: AppBar(title: const Text('Tarih Formatting')),46body: Center(47child: Column(48mainAxisAlignment: MainAxisAlignment.center,49children: [50Text('Sistem Dili: ${locale.languageCode}'),51const SizedBox(height: 20),52Text('Kısa Format: $formatted'),53Text('Uzun Format: $fullFormat'),54],55),56),57);58}59}Beklenen çıktı: Türkçe ayarlı telefonda '15 Mar 2024' veya 'Cuma, 15 Mart 2024' gösterilir. İngilizce ayarlıda ise 'Mar 15, 2024' veya 'Friday, March 15, 2024' görünür.
React Native'de ise react-native-date-picker ve date-fns ile benzer sonuç elde edebilirsin. Önemli nokta: sunucudan gelen tarihi her zaman ISO 8601 formatında (2024-03-15T10:30:00Z) saklamak, gösterirken ise DateFormat ya da date-fns kütüphanesi ile yerel dile çevirmek. Aksi takdirde kullanıcı kafası karışır ve tarih yanlış okunabilir. Ayrıca saat dilimi farkını da intl paketinin DateFormat sınıfı otomatik yönetir; UTC saatini yerel saate çevirmesi için tarih nesnesini oluştururken sistem saat dilimini dikkate alması yeterli.
0 yorum