تحوّل 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 | السنة، رقمان | 26 |
MMMM | اسم الشهر كاملًا | October |
MMM | اسم الشهر مختصرًا | Oct |
MM | الشهر، رقمان | 10 |
M | الشهر، رقم أو رقمان | 10 |
dddd | اسم اليوم كاملًا | Friday |
ddd | اسم اليوم مختصرًا | Fri |
dd | يوم الشهر، رقمان | 09 |
d | يوم الشهر، رقم أو رقمان (داخل نمط) | 9 |
HH | الساعة، من 00 إلى 23 | 18 |
H | الساعة، من 0 إلى 23 | 18 |
hh | الساعة، من 01 إلى 12 | 06 |
h | الساعة، من 1 إلى 12 | 6 |
mm | الدقيقة، رقمان | 30 |
ss | الثانية، رقمان | 07 |
fff | أجزاء الألف من الثانية | 045 |
fffffff | النبضات (سبعة أرقام كسرية) | 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 | ذهاب وإياب ISO 8601، 7 أرقام كسرية، المنطقة | لا |
s | ISO 8601 قابل للفرز، بلا كسور، بلا منطقة | لا |
u | عالمي قابل للفرز، ينتهي بـ Z | لا |
r | RFC 1123، لترويسات HTTP | لا |
تنتج o وs وu وr النص نفسه في كل ثقافة، وهذا يجعلها آمنة للسجلات وأسماء الملفات وتبادل البيانات. لاحظ أن u وr على DateTime لا تحوّلان القيمة إلى 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 والذهاب والإياب بـ "o"
تكتب صيغة الذهاب والإياب "o" كل النبضات مع معلومات المنطقة، فتعيد قراءة النص قيمة 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. تقرأ أدوات تسلسل JSON وقواعد البيانات وDate في JavaScript هذه الصيغة كلها.
تنسيق TimeSpan
لـ TimeSpan مجموعة محدّدات مخصصة خاصة به وأصغر: d (الأيام) وhh وmm وss وfff. بخلاف DateTime يجب هروب كل محرف حرفي، بما في ذلك : و.، بشرطة مائلة عكسية أو وضعه بين علامتي اقتباس:
المخرجات:
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./في نمط للبيانات. هو فاصل التاريخ في الثقافة. ضعه بين علامتي اقتباس أو استخدم الثقافة الثابتة.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#؟
استخدم صيغة الذهاب والإياب "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.