DateTime.ToString(format) הופך תאריך לטקסט. הפורמט הוא או מחרוזת פורמט סטנדרטית (אות אחת כמו d או o, שהתבנית המדויקת שלה מגיעה מהתרבות) או תבנית מותאמת שבנויה ממגדירים כמו yyyy, MM ו-HH. אותן מחרוזות עובדות באינטרפולציה, $"{date:yyyy-MM-dd}", וב-string.Format.
פלט:
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
הדוגמאות בדף הזה מעבירות CultureInfo.InvariantCulture כדי שהפלט יהיה זהה בכל מחשב; בלעדיו, ToString משתמשת בתרבות הנוכחית, שיכולה לשנות שמות חודשים, מפרידים ואפילו את לוח השנה.
מגדירי פורמט מותאמים
פורמט מותאם הוא תבנית שבה אותיות מסוימות מייצגות חלקים של התאריך. הן רגישות לאותיות גדולות וקטנות: M הוא חודש ו-m הוא דקה, H היא השעה בפורמט 24 שעות ו-h השעה בפורמט 12 שעות.
| מגדיר | משמעות | דוגמה עבור 2026-10-09 18:30:07.045 |
|---|---|---|
yyyy | שנה, 4 ספרות | 2026 |
yy | שנה, 2 ספרות | 26 |
MMMM | שם חודש מלא | October |
MMM | שם חודש מקוצר | Oct |
MM | חודש, 2 ספרות | 10 |
M | חודש, ספרה אחת או 2 | 10 |
dddd | שם יום מלא | Friday |
ddd | שם יום מקוצר | Fri |
dd | יום בחודש, 2 ספרות | 09 |
d | יום בחודש, ספרה אחת או 2 (בתוך תבנית) | 9 |
HH | שעה, 00 עד 23 | 18 |
H | שעה, 0 עד 23 | 18 |
hh | שעה, 01 עד 12 | 06 |
h | שעה, 1 עד 12 | 6 |
mm | דקה, 2 ספרות | 30 |
ss | שנייה, 2 ספרות | 07 |
fff | אלפיות שנייה | 045 |
fffffff | Ticks (שבע ספרות אחרי הנקודה) | 0450000 |
tt | ציון AM/PM | PM |
zzz | היסט מ-UTC (DateTimeOffset או זמן מקומי) | +02:00 |
K | מידע על אזור הזמן: Z, היסט, או כלום | Z (לערך UTC) |
/ | מפריד התאריך של התרבות | / או . או - |
: | מפריד השעה של התרבות | : |
'text' או \c | טקסט או תו מילולי | 'at' |
כל תו אחר מועתק כמו שהוא. זה כולל אותיות שאינן מגדירים, וכך "YYYY-DD" מדפיס בשקט YYYY-DD: אין ב-.NET מגדיר Y או D באות גדולה.
אות אחת לבדה נקראת כפורמט סטנדרטי, לא כמותאם: ToString("d") היא תבנית התאריך הקצר, לא מספר היום. כדי לקבל רק את היום, כתבו ToString("%d") או השתמשו במאפיין Day.
פלט:
10/09/2026
9
20261009_183007
Week of Oct 9
18h30
2026-10-09T18:30:07
YYYY-DD
מחרוזות פורמט סטנדרטיות
פורמטים סטנדרטיים הם אותיות בודדות שהתבנית בפועל שלהן מוגדרת על ידי התרבות. הם הבחירה הנכונה לטקסט שמוצג למשתמשים, כי כל תרבות מקבלת את המוסכמות שלה בחינם.
פלט:
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
| קוד | שם | תלוי תרבות? |
|---|---|---|
d / D | תאריך קצר / ארוך | כן |
t / T | שעה קצרה / ארוכה | כן |
f / F | תאריך ארוך עם שעה קצרה / ארוכה | כן |
g / G | תאריך קצר עם שעה קצרה / ארוכה | כן |
M | חודש ויום | כן |
Y | שנה וחודש | כן |
o | Round-trip ISO 8601, 7 ספרות אחרי הנקודה, אזור זמן | לא |
s | ISO 8601 שניתן למיון, בלי שברים, בלי אזור זמן | לא |
u | אוניברסלי שניתן למיון, מסתיים ב-Z | לא |
r | RFC 1123, ל-headers של HTTP | לא |
o, s, u ו-r מפיקים את אותו טקסט בכל תרבות, ולכן הם בטוחים ללוגים, לשמות קבצים ולהעברת נתונים. שימו לב שעל DateTime, u ו-r לא ממירים את הערך ל-UTC; הם מדפיסים אותו כמו שהוא ומתייגים אותו כ-UTC, אז קראו קודם ל-ToUniversalTime() (או השתמשו ב-DateTime.UtcNow) אם הערך מקומי. (על DateTimeOffset הם כן ממירים.)
התרבות משנה את הפלט
הפורמטים הסטנדרטיים, שמות החודשים והימים, והמפרידים / ו-: מגיעים כולם מהתרבות. העבירו תרבות כארגומנט השני ל-ToString:
פלט:
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
נתוני התרבות אינם קפואים. .NET על Linux ועל macOS קוראת אותם מספריית ICU שמותקנת במערכת, ומאז .NET 5 גם .NET על Windows 10 ואילך (.NET Framework משתמשת בנתוני ה-NLS של Windows עצמה), כך שתבנית יכולה להשתנות מעט בין גרסאות ופלטפורמות: גרסאות ICU עדכניות, למשל, שמות רווח צר בלתי שביר במקום רווח רגיל לפני "PM" בפורמט השעה הקצר של ארה"ב, וחלקן נותנות תאריכים קצרים בספרדית בלי האפס המוביל. זו עוד סיבה אף פעם לא לפענח טקסט שעוצב לתצוגה.
נובעים מזה שני כללים. לטקסט שאדם קורא, עצבו עם התרבות שלו (בשרת, זו שמגיעה מהבקשה, לא זו של השרת) והעדיפו פורמטים סטנדרטיים, כך שקורא גרמני יראה 09.10.2026 וקורא אמריקאי 10/9/2026. לטקסט שתוכנית קוראת, השתמשו ב-CultureInfo.InvariantCulture ובתבנית חד-משמעית כמו yyyy-MM-dd או o. תאריך שנכתב עם התרבות הנוכחית ופוענח במחשב אחר הוא מקור קלאסי לימים וחודשים שהתחלפו.
ISO 8601 ו-round-trip עם "o"
פורמט ה-round-trip "o" כותב כל tick ובנוסף את המידע על אזור הזמן, כך שפענוח הטקסט מחזיר בדיוק את אותו DateTime, כולל ה-Kind שלו:
פלט:
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 מסמנת UTC; DateTime עם Kind מסוג Unspecified לא מקבל סיומת; זמן מקומי או DateTimeOffset מקבלים את ההיסט שלהם (+02:00). פענחו עם DateTimeStyles.RoundtripKind כדי שה-Kind ישרוד. serializers של JSON, מסדי נתונים ו-Date של JavaScript קוראים כולם את הפורמט הזה.
עיצוב TimeSpan
ל-TimeSpan יש קבוצה משלו, קטנה יותר, של מגדירים מותאמים: d (ימים), hh, mm, ss, ו-fff. בניגוד ל-DateTime, כל תו מילולי, כולל : ו-., חייב לקבל escape עם לוכסן הפוך או להיות במירכאות:
פלט:
1.03:25:09.1200000
1.03:25:09.1200000
03:25:09
1.03:25
25:09.120
27:25
hh בפורמט של TimeSpan הוא רכיב השעות (0 עד 23), כך שמשך של 27 שעות מודפס כ-03. לסכומים מעל יום, חשבו מתוך TotalHours כמו בשורה האחרונה. elapsed.ToString("hh:mm") בלי הלוכסן ההפוך זורק FormatException.
טעויות נפוצות
mmלחודש."yyyy-mm-dd"מדפיס דקות באמצע:2026-30-09. חודש הואMM.hhבליtt."hh:mm"הוא שעון 12 שעות בלי AM או PM, כך ש-06:30 דו-משמעי. השתמשו ב-HHלפורמט 24 שעות.YYYYו-DD. הם לא מגדירים ב-.NET; הם מודפסים כמו שהם. השתמשו ב-yyyyוב-dd./בתבנית לנתונים. זה מפריד התאריך של התרבות. שימו אותו במירכאות או השתמשו בתרבות הבלתי תלויה (invariant).ToString()ברירת מחדל בלוגים או בקבצים. הפורמט תלוי במחשב. העבירו פורמט ותרבות.- זמן מקומי שמתויג כ-UTC.
"u","r"ו-'Z'שנכתב ביד לא ממירים; המירו קודם. - פענוח עם תבנית שונה מזו שבה כתבתם. שמרו מחרוזות פורמט לנתונים בקבוע אחד והשתמשו בו גם עם
ToStringוגם עםParseExact.
שאלות נפוצות
איך מעצבים DateTime בפורמט yyyy-MM-dd ב-C#?
date.ToString("yyyy-MM-dd") נותן 2026-10-09. במחרוזת אינטרפולציה כתבו $"{date:yyyy-MM-dd}". הוסיפו " HH:mm:ss" בשביל השעה בפורמט 24 שעות. העבירו CultureInfo.InvariantCulture כארגומנט שני כשהטקסט מיועד לקובץ או לתוכנית אחרת, כדי שלוח השנה, שמות החודשים והמפרידים אף פעם לא יהיו תלויים במחשב.
מה ההבדל בין mm ל-MM בפורמטים של תאריכים ב-C#?
MM הוא החודש (01 עד 12) ו-mm הוא הדקה (00 עד 59). הפורמט רגיש לאותיות גדולות וקטנות, כך ש-yyyy-mm-dd מדפיס את הדקות במקום שבו אמור להיות החודש, באג שקל לפספס כשמעיפים מבט בערך בודד. באותו אופן HH היא השעה בפורמט 24 שעות ו-hh השעה בפורמט 12 שעות.
איך מעצבים DateTime ב-ISO 8601 ב-C#?
השתמשו בפורמט ה-round-trip "o": DateTime.UtcNow.ToString("o") נותן 2026-10-09T18:30:07.0450000Z, עם שבע ספרות אחרי הנקודה ו-Z עבור UTC או היסט עבור זמנים מקומיים. "s" נותן את הצורה הקצרה שניתנת למיון, בלי שברים ובלי אזור זמן, ו-"yyyy-MM-ddTHH:mm:ssZ" היא וריאציה מותאמת נפוצה.
איך מציגים AM ו-PM בפורמט תאריך ב-C#?
השתמשו ב-hh או ב-h לשעון 12 שעות וב-tt לציון AM/PM: date.ToString("h:mm tt", CultureInfo.GetCultureInfo("en-US")) נותן 6:30 PM. הציון מגיע מהתרבות, ולחלק מהתרבויות אין כזה, אז העבירו תרבות במפורש כשאתם צריכים AM ו-PM.
למה פורמט התאריך שלי מציג נקודות במקום לוכסנים?
במחרוזת פורמט, / הוא לא לוכסן מילולי אלא מפריד התאריך של התרבות, ו-: הוא מפריד השעה של התרבות. במחשב גרמני dd/MM/yyyy מדפיס 09.10.2026. שימו את התו במירכאות כדי לכפות אותו, dd'/'MM'/'yyyy, או עצבו עם CultureInfo.InvariantCulture.