التعامل مع التاريخ فقط التواريخ عبر المناطق الزمنية في .Net

StackOverflow https://stackoverflow.com/questions/79774

  •  09-06-2019
  •  | 
  •  

سؤال

طيب - قليلا من الفم.لذا فإن المشكلة التي أواجهها هي - أحتاج إلى تخزين تاريخ انتهاء الصلاحية في مكان ما فقط جزء التاريخ مطلوب ولا أريد أي تحويل للمنطقة الزمنية.لذا، على سبيل المثال، إذا قمت بتعيين تاريخ انتهاء الصلاحية على "08 مارس 2008"، فأنا أريد إرجاع هذه القيمة إلى أي عميل - بغض النظر عن منطقته الزمنية.تكمن مشكلة في وقت البعيد في وقت البيانات في أنه يتم تخزينها/إرسالها على أنها "08 مارس 2008 00:00" ، مما يعني للعملاء الذين يتواصلون من أي منطقة زمنية غربًا لي يتم تحويله وبالتالي انقلب إلى "07 مارس 2008" أي اقتراحات للتعامل بشكل نظيف لهذا السيناريو؟من الواضح أن إرسالها كسلسلة سيعمل.أي شيء آخر ؟شكرا يا إيان

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

المحلول

يمكنك إنشاء تاريخ هيكلي يوفر الوصول إلى التفاصيل التي تريدها/تحتاجها، مثل:

public struct Date
{
    public int Month; //or string instead of int
    public int Day;
    public int Year;
}

إنه خفيف الوزن ومرن ويمنحك التحكم الكامل.

نصائح أخرى

لست متأكدًا من تقنية الاتصال عن بُعد التي تشير إليها، ولكن هذه مشكلة حقيقية في WCF، الذي يدعم حاليًا فقط تسلسل DateTime كـ xs:DateTime، وهو غير مناسب لقيمة التاريخ فقط حيث لا تكون مهتمًا بالمناطق الزمنية.

يقدم .NET 3.5 نوع DateTimeOffset الجديد، وهو جيد لنقل DateTime بين المناطق الزمنية، ولكنه لا يساعد في سيناريو التاريخ فقط.

من الناحية المثالية، يحتاج WCF إلى دعم xs:Date بشكل اختياري لتسلسل التواريخ كما هو مطلوب هنا:

http://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=349215

أفعل ذلك مثل هذا:عندما يكون لدي تاريخ في الذاكرة أو مخزن في ملف، يكون دائمًا في DateTime بالتوقيت العالمي المنسق (UTC).عندما أعرض التاريخ للمستخدم، يكون دائمًا عبارة عن سلسلة.عندما أقوم بالتحويل بين السلسلة وDateTime، أقوم أيضًا بتحويل المنطقة الزمنية.

بهذه الطريقة، لن أضطر مطلقًا إلى التعامل مع المناطق الزمنية في منطقتي، فقط في العرض التقديمي.

يمكنك إرسالها بتوقيت UTC

dateTime1.ToUniversalTime()

أعتقد أن الإرسال كسلسلة طابع زمني سيكون الطريقة الأسرع/الأسهل على الرغم من أنه يمكنك النظر في فرض لغة لإيقاف حدوث تحويل الوقت.

أسهل طريقة للتعامل مع هذا الأمر على التطبيقات في الماضي هي تخزين التاريخ كسلسلة بتنسيق yyyy-mm-dd.إنه لا لبس فيه ولا تتم ترجمته تلقائيًا بواسطة أي شيء.

نعم إنه الألم...

لماذا لا ترسلها كسلسلة ثم تحولها مرة أخرى إلى نوع التاريخ حسب الحاجة؟بهذه الطريقة لن يتم تحويله عبر مناطق زمنية مختلفة.أبقيها بسيطة.

يحرر:تعجبني فكرة Struct، فهي تتيح وظائف جيدة.

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