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 |
|---|---|---|
yyyy | Yıl, 4 basamak | 2026 |
yy | Yıl, 2 basamak | 26 |
MMMM | Tam ay adı | October |
MMM | Kısaltılmış ay adı | Oct |
MM | Ay, 2 basamak | 10 |
M | Ay, 1 ya da 2 basamak | 10 |
dddd | Tam gün adı | Friday |
ddd | Kısaltılmış gün adı | Fri |
dd | Ayın günü, 2 basamak | 09 |
d | Ayın günü, 1 ya da 2 basamak (bir desende) | 9 |
HH | Saat, 00 ile 23 arası | 18 |
H | Saat, 0 ile 23 arası | 18 |
hh | Saat, 01 ile 12 arası | 06 |
h | Saat, 1 ile 12 arası | 6 |
mm | Dakika, 2 basamak | 30 |
ss | Saniye, 2 basamak | 07 |
fff | Milisaniye | 045 |
fffffff | Tick'ler (yedi ondalık basamak) | 0450000 |
tt | AM/PM göstergesi | PM |
zzz | UTC'ye göre fark (DateTimeOffset ya da yerel saat) | +02:00 |
K | Dilim bilgisi: Z, bir fark ya da hiçbir şey | Z (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 \c | Literal 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
| Kod | Adı | Kültüre bağlı mı? |
|---|---|---|
d / D | Kısa / uzun tarih | Evet |
t / T | Kısa / uzun saat | Evet |
f / F | Kısa / uzun saatle uzun tarih | Evet |
g / G | Kısa / uzun saatle kısa tarih | Evet |
M | Ay ve gün | Evet |
Y | Yıl ve ay | Evet |
o | Gidiş dönüş ISO 8601, 7 ondalık basamak, dilim | Hayır |
s | Sıralanabilir ISO 8601, kesir yok, dilim yok | Hayır |
u | Evrensel sıralanabilir, Z ile biter | Hayır |
r | RFC 1123, HTTP başlıkları için | Hayı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. AyMM'dir. ttolmadanhh."hh:mm"AM ya da PM olmayan 12 saatlik bir saattir, bu yüzden 06:30 belirsizdir. 24 saatlik zaman içinHHkullanın.YYYYveDD. .NET'te belirteç değildirler; olduğu gibi yazdırılırlar.yyyyveddkullanı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
ToStringhemParseExactile 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.