Ç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.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import 'package:intl/intl.dart';
2import 'package:flutter/material.dart';
3
4void main() {
5runApp(const MyApp());
6}
7
8class MyApp extends StatelessWidget {
9const MyApp({Key? key}): super(key: key);
10
11@override
12Widget 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}
27
28class DateParseScreen extends StatelessWidget {
29const DateParseScreen({Key? key}): super(key: key);
30
31@override
32Widget build(BuildContext context) {
33// Sistem dilini al
34Locale locale = Localizations.localeOf(context);
35
36// String tarih (her zaman ISO formatında olmalı)
37String dateString = '2024-03-15';
38DateTime parsedDate = DateTime.parse(dateString);
39
40// Yerel formata göre göster
41String formatted = DateFormat.yMMMd(locale.toString()).format(parsedDate);
42String fullFormat = DateFormat.yMMMMEEEEd(locale.toString()).format(parsedDate);
43
44return 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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz