سؤال

انا متواجد حاليا وقت الصيف البريطاني وهو UTC +1 ساعة. أكدت جهاز الكمبيوتر الخاص بي صحيحا مع التعليمة البرمجية التالية ويعيد ذلك صحيحا.

System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(Date.Now)

سؤالي هو بعد ذلك لماذا تكوين UTC لا يعمل كما أتوقع:

DateTime.Now.ToString("u")

إرجاع تاريخ النظام الحالي الدقيق على النحو التالي بتنسيق UTC كما هو متوقع ولكن مع Z (زولو الوقت) في النهاية ليس +01: 00؟

بمعنى آخر

2009-05-27 14:21:22Z

ليس

2009-05-27 14:21:22+01:00

هل هذه الوظيفة الصحيحة؟

هل كانت مفيدة؟

المحلول

تنص MSDN على ما يلي:

يمثل سلسلة مخصصة لتاريخ وتنسيق الوقت المحدد بواسطة خاصية DateTimeFormatinfo.universalesortabletateimeptern. يعكس النمط معيار محدد والخاصية للقراءة فقط. لذلك، فهي دائما نفس الشيء، بغض النظر عن الثقافة المستخدمة أو مزود تنسيق المرفق. سلسلة التنسيق المخصصة هي "YYYY" - 'مم' - 'DD HH': 'MM': 'SS'Z' ".

عند استخدام محدد تنسيق المعيار هذا، تستخدم عملية التنسيق أو التحليل دائما الثقافة الثابتة.

التنسيق لا يحول المنطقة الزمنية لكائن التاريخ والوقت. لذلك، يجب على التطبيق تحويل تاريخ ووقت لتنسيق الوقت العالمي (UTC) قبل استخدام هذا المستنسيق محدد.

يجب عليك استخدام التعليمات البرمجية التالية لتحويل تاريخك الحالي إلى UTC قبل التنسيق عليه:

DateTime.UtcNow.ToString("u")

أو

DateTime.Now.ToUniversalTime().ToString("u")

لعرضه في التنسيق الذي توقعته (أي 2009-05-27 14: 21: 22 + 01: 00)، ستحتاج إلى استخدام تنسيق تاريخ مخصص:

DateTime.Now.ToString("yyyy-MM-dd HH:mm:sszzz");

نصائح أخرى

"U" هو نمط التاريخ / الوقت غير القابل للتنفيذ العالمي، وليس تنسيق UTC؛ إلى اقتباس توثيق:

يمثل سلسلة مخصصة للتاريخ والتنسيق الوقت الذي يحدده DatetimeFormatinfo .. ::. UniversaliortabledateTimeptern الخاصية. يعكس النمط معيار محدد والخاصية للقراءة فقط. لذلك، فهي دائما نفس الشيء، بغض النظر عن الثقافة المستخدمة أو مزود تنسيق المرفق. سلسلة التنسيق المخصصة هي "YYYY" - 'مم' - 'DD HH': 'MM': 'SS'Z' ".

عند استخدام محدد تنسيق المعيار هذا، تستخدم عملية التنسيق أو التحليل دائما الثقافة الثابتة.

التنسيق لا يحول المنطقة الزمنية لكائن التاريخ والوقت. لذلك، يجب على التطبيق تحويل تاريخ ووقت لتنسيق الوقت العالمي (UTC) قبل استخدام هذا المستنسيق محدد.

تحتاج إلى استخدام DateTime.Now.touniveraltime (). Tostring ("U").

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top