Menu

C# DateTime Format: Standart ve Özel Biçim String'leri, Kültür, ISO 8601

C#'ta bir DateTime'ı string olarak biçimlendirmek: standart biçim string'leri (d, D, o, s, u, t), yyyy-MM-dd HH:mm:ss gibi özel desenler, tam bir belirteç tablosu, kültürün çıktıyı nasıl değiştirdiği, "o" ile ISO 8601 gidiş dönüş ve mm ile MM, hh ile HH hataları.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

DateTime.ToString(format) bir tarihi metne çevirir. Biçim ya bir standart biçim string'idir (tam deseni kültürden gelen d ya da o gibi tek bir harf) ya da yyyy, MM ve HH gibi belirteçlerden oluşturulan özel bir desendir. Aynı string'ler interpolation'da, $"{date:yyyy-MM-dd}", ve string.Format'ta çalışır.

Çıktı:

2026-10-09
2026-10-09 18:30:07
09/10/2026
Oct 9, 2026
Friday, October 9
6:30 PM
18:30:07.045
Shipped 2026-10-09 at 18:30

Bu sayfadaki örnekler çıktının her makinede aynı olması için CultureInfo.InvariantCulture verir; o olmadan ToString geçerli kültürü kullanır ve bu, ay adlarını, ayırıcıları ve hatta takvimi değiştirebilir.

Özel biçim belirteçleri

Özel bir biçim, belirli harflerin tarihin parçalarını temsil ettiği bir desendir. Büyük/küçük harfe duyarlıdırlar: M ay, m dakikadır; H 24 saatlik, h 12 saatlik saattir.

BelirteçAnlamı2026-10-09 18:30:07.045 için örnek
yyyyYıl, 4 basamak2026
yyYıl, 2 basamak26
MMMMTam ay adıOctober
MMMKısaltılmış ay adıOct
MMAy, 2 basamak10
MAy, 1 ya da 2 basamak10
ddddTam gün adıFriday
dddKısaltılmış gün adıFri
ddAyın günü, 2 basamak09
dAyın günü, 1 ya da 2 basamak (bir desende)9
HHSaat, 00 ile 23 arası18
HSaat, 0 ile 23 arası18
hhSaat, 01 ile 12 arası06
hSaat, 1 ile 12 arası6
mmDakika, 2 basamak30
ssSaniye, 2 basamak07
fffMilisaniye045
fffffffTick'ler (yedi ondalık basamak)0450000
ttAM/PM göstergesiPM
zzzUTC'ye göre fark (DateTimeOffset ya da yerel saat)+02:00
KDilim bilgisi: Z, bir fark ya da hiçbir şeyZ (UTC bir değer için)
/Kültürün tarih ayırıcısı/ ya da . ya da -
:Kültürün saat ayırıcısı:
'text' ya da \cLiteral metin ya da karakter'at'

Diğer her karakter olduğu gibi kopyalanır. Buna belirteç olmayan harfler de dahildir; "YYYY-DD"'nin sessizce YYYY-DD yazdırması bu yüzdendir: .NET'te büyük Y ya da D belirteci yoktur.

Tek başına tek bir harf özel değil standart bir biçim olarak okunur: ToString("d") gün numarası değil kısa tarih desenidir. Yalnızca günü almak için ToString("%d") yazın ya da Day property'sini kullanın.

Çıktı:

10/09/2026
9
20261009_183007
Week of Oct 9
18h30
2026-10-09T18:30:07
YYYY-DD

Standart biçim string'leri

Standart biçimler, asıl deseni kültür tarafından tanımlanan tek harflerdir. Kullanıcılara gösterilen metin için doğru seçimdirler, çünkü her kültür kendi geleneklerini bedavaya alır.

Çıktı:

d  10/09/2026
D  Friday, 09 October 2026
f  Friday, 09 October 2026 18:30
g  10/09/2026 18:30
G  10/09/2026 18:30:07
M  October 09
Y  2026 October
t  18:30
T  18:30:07
o  2026-10-09T18:30:07.0000000Z
s  2026-10-09T18:30:07
u  2026-10-09 18:30:07Z
r  Fri, 09 Oct 2026 18:30:07 GMT
en-US d: 10/9/2026, D: Friday, October 9, 2026
KodAdıKültüre bağlı mı?
d / DKısa / uzun tarihEvet
t / TKısa / uzun saatEvet
f / FKısa / uzun saatle uzun tarihEvet
g / GKısa / uzun saatle kısa tarihEvet
MAy ve günEvet
YYıl ve ayEvet
oGidiş dönüş ISO 8601, 7 ondalık basamak, dilimHayır
sSıralanabilir ISO 8601, kesir yok, dilim yokHayır
uEvrensel sıralanabilir, Z ile biterHayır
rRFC 1123, HTTP başlıkları içinHayır

o, s, u ve r her kültürde aynı metni üretir; bu da onları log'lar, dosya adları ve veri alışverişi için güvenli kılar. Bir DateTime üzerinde u ve r'nin değeri UTC'ye dönüştürmediğine dikkat edin; olduğu gibi yazdırıp UTC olarak etiketlerler, bu yüzden değer yerelse önce ToUniversalTime() çağırın (ya da DateTime.UtcNow kullanın). (Bir DateTimeOffset üzerinde dönüştürürler.)

Kültür çıktıyı değiştirir

Standart biçimler, ay ve gün adları ve / ile : ayırıcılarının hepsi kültürden gelir. ToString'e ikinci argüman olarak bir kültür verin:

Çıktı:

en-US  10/9/2026
en-GB  09/10/2026
de-DE  09.10.2026
fr-FR  09/10/2026
ja-JP  2026/10/09
Freitag, 9. Oktober 2026
vendredi 9 octobre 2026
09.10.2026
09/10/2026

Kültür verisi donmuş değildir. Linux ve macOS'taki .NET onu sisteme kurulu ICU kütüphanesinden okur, .NET 5'ten beri Windows 10 ve sonrasındaki .NET de öyle yapar (.NET Framework Windows'un kendi NLS verisini kullanır); bu yüzden bir desen sürümler ve platformlar arasında biraz değişebilir: örneğin yeni ICU sürümleri ABD kısa saat biçiminde "PM"'den önce düz bir boşluk yerine dar bir bölünmez boşluk koyar ve bazıları İspanyolca kısa tarihleri baştaki sıfır olmadan verir. Gösterim için biçimlendirilmiş metni asla parse etmemek için bir neden daha.

Buradan iki kural çıkar. Bir insanın okuduğu metin için onun kültürüyle biçimlendirin (bir sunucuda sunucununkiyle değil, istekten gelenle) ve standart biçimleri tercih edin; böylece Alman bir okuyucu 09.10.2026, Amerikalı bir okuyucu 10/9/2026 görür. Bir programın okuduğu metin için CultureInfo.InvariantCulture ve yyyy-MM-dd ya da o gibi belirsiz olmayan bir desen kullanın. Geçerli kültürle yazılıp başka bir makinede parse edilen bir tarih, yer değiştirmiş gün ve ayların klasik kaynağıdır.

ISO 8601 ve "o" ile gidiş dönüş

Gidiş dönüş biçimi "o" her tick'i ve dilim bilgisini yazar, bu yüzden metni parse etmek Kind dahil tam olarak aynı DateTime'ı geri verir:

Çıktı:

2026-10-09T18:30:07.0450000Z
2026-10-09T18:30:07.0450000
2026-10-09T20:30:07.0000000+02:00
True
Utc
2026-10-09T18:30:07Z
2026-10-09 20:30 +02:00

Z son eki UTC'yi işaretler; Kind'ı Unspecified olan bir DateTime son ek almaz; yerel bir saat ya da bir DateTimeOffset farkını alır (+02:00). Kind'ın korunması için DateTimeStyles.RoundtripKind ile parse edin. JSON serializer'ları, veritabanları ve JavaScript'in Date'i bu biçimi okur.

TimeSpan biçimlendirmek

TimeSpan'in kendi, daha küçük özel belirteç kümesi vardır: d (günler), hh, mm, ss ve fff. DateTime'ın aksine : ve . dahil her literal karakter ters eğik çizgiyle kaçırılmalı ya da tırnak içine alınmalıdır:

Çıktı:

1.03:25:09.1200000
1.03:25:09.1200000
03:25:09
1.03:25
25:09.120
27:25

Bir TimeSpan biçimindeki hh saat bileşenidir (0 ile 23 arası), bu yüzden 27 saatlik bir süre 03 olarak yazdırılır. Bir günün üzerindeki toplamlar için son satırdaki gibi TotalHours'tan hesaplayın. Ters eğik çizgi olmadan elapsed.ToString("hh:mm") bir FormatException fırlatır.

Yaygın hatalar

  • Ay için mm. "yyyy-mm-dd" ortaya dakikaları yazdırır: 2026-30-09. Ay MM'dir.
  • tt olmadan hh. "hh:mm" AM ya da PM olmayan 12 saatlik bir saattir, bu yüzden 06:30 belirsizdir. 24 saatlik zaman için HH kullanın.
  • YYYY ve DD. .NET'te belirteç değildirler; olduğu gibi yazdırılırlar. yyyy ve dd kullanın.
  • Veri için bir desende /. Kültürün tarih ayırıcısıdır. Tırnak içine alın ya da invariant kültürü kullanın.
  • Log'larda ya da dosyalarda varsayılan ToString(). Biçim makineye bağlıdır. Bir biçim ve bir kültür verin.
  • UTC olarak etiketlenmiş yerel saat. "u", "r" ve elle yazılmış bir 'Z' dönüştürmez; önce dönüştürün.
  • Yazdığınızdan farklı bir desenle parse etmek. Veri için biçim string'lerini tek bir sabitte tutun ve onu hem ToString hem ParseExact ile kullanın.

Sıkça Sorulan Sorular

C#'ta bir DateTime yyyy-MM-dd olarak nasıl biçimlendirilir?

date.ToString("yyyy-MM-dd") 2026-10-09 verir. Interpolated bir string'de $"{date:yyyy-MM-dd}" yazın. 24 saatlik biçimde saat için " HH:mm:ss" ekleyin. Metin bir dosya ya da başka bir program içinse ikinci argüman olarak CultureInfo.InvariantCulture verin; böylece takvim, ay adları ve ayırıcılar asla makineye bağlı olmaz.

C# tarih biçimlerinde mm ile MM arasındaki fark nedir?

MM ay (01 ile 12 arası), mm dakikadır (00 ile 59 arası). Biçim büyük/küçük harfe duyarlıdır, bu yüzden yyyy-mm-dd ayın olması gereken yere dakikaları yazdırır; tek bir değere göz attığınızda gözden kaçması kolay bir hatadır. Aynı şekilde HH 24 saatlik, hh 12 saatlik saattir.

C#'ta bir DateTime ISO 8601 biçiminde nasıl biçimlendirilir?

Gidiş dönüş biçimi "o"'yu kullanın: DateTime.UtcNow.ToString("o") yedi ondalık basamak ve UTC için bir Z ya da yerel saatler için bir fark ile 2026-10-09T18:30:07.0450000Z verir. "s" kesirler ve dilim olmadan daha kısa sıralanabilir biçimi verir, "yyyy-MM-ddTHH:mm:ssZ" ise yaygın bir özel varyanttır.

C# tarih biçiminde AM ve PM nasıl gösterilir?

12 saatlik saat için hh ya da h, AM/PM göstergesi için tt kullanın: date.ToString("h:mm tt", CultureInfo.GetCultureInfo("en-US")) 6:30 PM verir. Gösterge kültürden gelir ve bazı kültürlerde hiç yoktur, bu yüzden AM ve PM gerektiğinde açıkça bir kültür verin.

Tarih biçimim neden eğik çizgi yerine nokta gösteriyor?

Bir biçim string'inde / literal bir eğik çizgi değil kültürün tarih ayırıcısıdır, : ise kültürün saat ayırıcısıdır. Almanca bir makinede dd/MM/yyyy 09.10.2026 yazdırır. Karakteri zorlamak için tırnak içine alın, dd'/'MM'/'yyyy, ya da CultureInfo.InvariantCulture ile biçimlendirin.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA