November 6, 2026

Instinctivecode

Pengembangan aplikasi iOS & Mac, UX

Format Tanggal dan Angka di Swift: Panduan Memilih

Meja kerja pengembang dengan laptop menampilkan kode Swift dan kalender untuk memformat tanggal
Tiga pendekatan populer untuk memformat tanggal dan angka di Swift punya karakter berbeda. Perbandingan ini membantu memilih yang paling pas untuk kebutuhan aplikasi iOS dan Mac kamu.

Memformat tanggal dan angka di Swift bisa dilakukan lewat DateFormatter, NumberFormatter, atau API FormatStyle yang lebih baru. Pilihan yang tepat bergantung pada apakah teks hasil format perlu dipakai berulang, digabung dengan string lain, atau langsung dipakai di tampilan SwiftUI.

Ketiganya berbeda pada tempat pemakaian dan cara hasilnya dipakai.

Ringkasan perbandingan tiga pendekatan

Aspek DateFormatter / NumberFormatter FormatStyle
Gaya API Objek kelas, mutable Struct nilai, immutable
Ketersediaan Sejak Foundation lama iOS 15, macOS 12 ke atas
Cocok untuk Kode lama, format kustom rumit, cache manual Tampilan SwiftUI, format terdeklarasi, kode baru
Perilaku default Mengikuti locale perangkat saat dibuat tanpa konfigurasi Mengikuti environment locale saat render
Biaya pembuatan Relatif mahal, sebaiknya di-cache Ringan, cukup dideklarasikan

DateFormatter untuk format kustom yang rumit

DateFormatter masih pilihan waras ketika kamu punya pola tanggal yang tidak bisa diungkapkan lewat format standar, misalnya label ringkas seperti 06 Nov 2026 dengan pemisahan khusus. Kamu mendefinisikan pola lewat string seperti dd MMM yyyy, lalu memanggil string(from:).

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "id_ID")
formatter.dateFormat = "dd MMM yyyy"
let label = formatter.string(from: Date())
// contoh hasil: 06 Nov 2026

Membuat DateFormatter berulang di dalam loop atau body view membuang waktu. Simpan sebagai properti statis agar dibuat sekali. Kalau kamu memformat tanggal di banyak tempat dengan pola berbeda, kelola cache-nya dengan rapi supaya tidak ada formatter baru setiap pemanggilan.

FormatStyle untuk tanggal di SwiftUI

Mulai iOS 15, Swift menyediakan API FormatStyle yang lebih ringkas dipakai di view. Kamu menulis date.formatted(.dateTime.day().month().year()) dan Swift mengurus locale, urutan komponen, serta pemisah sesuai pengaturan pengguna.

let sekarang = Date()
let lengkap = sekarang.formatted(date: .long, time: .omitted)
let ringkas = sekarang.formatted(.dateTime.day().month(.abbreviated))

FormatStyle tidak menyimpan state di objek kelas, jadi aman dipakai di body SwiftUI saat pengguna mengganti bahasa sistem. Format mengikuti environment, sehingga tampilan berubah tanpa kode tambahan. Ini juga membantu kalau kamu mengerjakan aplikasi macOS, karena perilaku formatnya serupa di kedua platform.

NumberFormatter dan FormatStyle untuk angka

Untuk angka, NumberFormatter adalah padanan lama yang juga masih dipakai. Kamu bisa mengatur jumlah desimal, pemisah ribuan, dan simbol mata uang lewat properti. Seperti DateFormatter, objek ini sebaiknya di-cache.

FormatStyle menyediakan cara yang lebih langsung: 1234567.891.formatted(.number.precision(.fractionLength(2))) atau harga.formatted(.currency(code: "IDR")). Untuk kebutuhan mata uang, API ini sudah menangani penempatan simbol dan jumlah desimal default per wilayah, jadi kamu tidak perlu merakit format manual.

Format angka yang mengikuti locale pengguna bisa membingungkan kalau angka itu dipakai untuk input. Pemisah ribuan dan koma desimal yang berbeda antar wilayah sebaiknya tidak dimasukkan ke field yang kemudian di-parse kembali. Simpan angka mentah, format hanya saat menampilkan.

Kapan tetap memakai formatter kelas

Ada beberapa kondisi di mana DateFormatter atau NumberFormatter lebih praktis:

  • Format sangat kustom yang tidak bisa diungkapkan lewat komponen FormatStyle, misalnya string dengan sisipan teks tetap.
  • Kode lama yang sudah stabil dan tidak mau diubah hanya demi keseragaman API.
  • Format yang perlu di-parse kembali, karena banyak pola parsing masih lebih mudah ditulis lewat formatter kelas.
  • Target deployment di bawah iOS 15 atau macOS 12.

Kalau aplikasimu menargetkan versi OS yang lebih lama, FormatStyle tidak tersedia dan kode perlu jalur fallback. Pertimbangkan hal ini saat menulis kode yang dipakai bersama di banyak target.

Kesalahan umum yang perlu dihindari

Membuat formatter baru setiap kali fungsi dipanggil adalah penyebab lambat yang sering tidak terlihat. Pada daftar panjang, pemformatan tanggal di setiap baris bisa menambah beban yang tidak perlu.

Kesalahan kedua adalah mengandalkan format default tanpa memikirkan locale. Pengguna di wilayah berbeda akan melihat urutan tanggal yang berbeda pula. Jika tampilanmu memakai format tetap untuk alasan desain, kunci locale secara eksplisit dan pastikan itu keputusan sadar.

Kesalahan ketiga muncul di aplikasi yang menampilkan data dari server. Tanggal ISO 8601 dari API sebaiknya di-parse dulu menjadi Date, baru diformat untuk tampilan. Jangan mengoper string mentah langsung ke DateFormatter dengan asumsi formatnya cocok.

Saat membangun fitur yang menampilkan jadwal, riwayat transaksi, atau ringkasan aktivitas, format tanggal sering bersinggungan dengan cara data disimpan dan disinkronkan. Kalau aplikasimu menyimpan data secara lokal dan sesekali menyegarkan dari server, perbandingan offline mode vs sinkronisasi cloud di aplikasi iOS membahas kapan konflik waktu bisa muncul dan cara menanganinya.

Untuk aplikasi yang memuat data pengguna, pemformatan yang rapi juga membantu saat pengguna memeriksa data mereka sendiri. Kalau aplikasimu menyimpan email atau identitas, sediakan panduan ringkas tentang cara memeriksa kebocoran data pribadi dan mengatasinya agar pengguna tahu langkah yang bisa diambil.

Saat menguji tampilan format di perangkat atau server berbeda, cek juga koneksi dan latensi dengan panduan cek ping dari berbagai lokasi supaya hasil uji tidak salah disimpulkan sebagai bug pemformatan.

Di sela pengujian, pengguna dan tim kadang butuh hiburan ringan. Bagi yang menyukai basket, sepakbola, atau UFC, menonton bareng secara gratis dengan host yang menghibur bisa jadi pilihan di tarkamlive ketika jeda build sedang panjang.

Ringkasan pilihan

Untuk kode baru yang berjalan di iOS 15 ke atas, FormatStyle adalah default yang masuk akal karena ringkas, aman di SwiftUI, dan mengikuti locale pengguna. DateFormatter dan NumberFormatter tetap relevan untuk format kustom rumit, parsing, atau target OS lama. Simpan formatter kelas sebagai nilai statis dan biarkan FormatStyle menangani tampilan yang dinamis.

Pertanyaan yang Sering Diajukan

Apakah FormatStyle bisa dipakai untuk format tanggal yang sepenuhnya kustom?

Sebagian besar kebutuhan umum bisa diungkapkan lewat kombinasi komponen, tapi pola dengan sisipan teks tetap atau urutan tidak lazim biasanya lebih mudah ditulis dengan DateFormatter dan string pola.

Kenapa tanggal di aplikasi saya berubah urutan saat bahasa perangkat diganti?

Karena format mengikuti locale. Jika urutan harus tetap untuk alasan desain, kunci locale secara eksplisit di formatter atau gunakan format dengan komponen yang sudah diurutkan sendiri.

Apakah NumberFormatter masih layak dipakai di proyek baru?

Layak untuk kasus yang butuh parsing angka atau konfigurasi rinci. Untuk sekadar menampilkan angka dan mata uang, API FormatStyle lebih ringkas dan tidak perlu dikelola cache-nya secara manual.