Pertukaran data memindahkan tanggal sebagai teks, jadi dua arah konversi harus sama kuatnya: ToString membentuk teks dari nilai, dan Parse beserta variannya membaca teks kembali menjadi nilai. Sumber galat klasik ada di arah parsing: pola umum TryParse mengikuti aturan culture, sehingga 17/08/2025 sah di satu culture dan ditolak di culture lain.

Format dan Parsing yang Ketat #

csharp
DateTime nilai = new DateTime(2025, 8, 17, 10, 30, 0);

string standar = nilai.ToString("yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
Console.WriteLine(standar);

DateTime hasil = DateTime.ParseExact(standar, "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
Console.WriteLine(hasil.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture));

bool ok = DateTime.TryParseExact(
    "17/08/2025", "dd/MM/yyyy",
    CultureInfo.InvariantCulture, DateTimeStyles.None,
    out DateTime terurai);
Console.WriteLine($"{ok} {terurai:yyyy-MM-dd}");

bool gagal = DateTime.TryParse(
    "17/08/2025", CultureInfo.InvariantCulture, DateTimeStyles.None, out _);
Console.WriteLine(gagal);

Output yang Dihasilkan:

text
2025-08-17T10:30:00
2025-08-17 10:30
True 2025-08-17
False

Mari kita bedah baris demi baris:

  1. Baris 3-4 (ToString ...): pola yyyy-MM-ddTHH:mm:ss menghasilkan bentuk ISO 8601; huruf T menjadi pemisah tanggal dan jam.
  2. Baris 6 (ParseExact): teks diurai hanya bila cocok persis dengan pola dan culture yang diberikan; penyimpangan sekecil apa pun melempar FormatException.
  3. Baris 9-13 (TryParseExact): pola dd/MM/yyyy membaca 17/08/2025 dengan benar; TryParseExact mengembalikan bool melalui parameter out alih-alih melempar exception.
  4. Baris 15-18 (TryParse tanpa pola): parser memakai pola pendek default culture invariant, yaitu MM/dd/yyyy; bulan 17 tidak sah sehingga hasilnya False.

Penentu format yang sering dipakai selain pola kustom: d untuk pola pendek culture, f untuk pola panjang dengan jam, dan O untuk ISO 8601 round-trip yang mempertahankan presisi hingga pecahan detik. Saat menulis pola kustom sendiri, ingat bahwa huruf M berbeda makna dari m, dan tanda kutip tunggal membuat teks apa pun dicetak sebagai literal.