سؤال

لدينا ASP.Net 2.0 تطبيق ويب يعمل مع الخادم في الغرب الأوسط (التوقيت الشرقي).في هذه اللحظة كل من عملائنا في نفس التوقيت الخادم.ونحن بذلك ملقم آخر عبر الإنترنت في أريزونا (الجبل التوقيت).

نحن تخزين جميع الأوقات في قاعدة بيانات SQL 2005 عن طريق C# codebehind التاريخ والوقت.UtcNow.

أثناء الاختبار واجهنا بعض الوقت في منطقة قضايا التحويل.لدينا مشكلة في متصفح الويب لدينا أوقات عرض الجبل الوقت القياسي بدلا من المنطقة الزمنية نحن اختبار من الذي هو التوقيت الشرقي.

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

lblUpdatedDate.Text = Convert.ToDateTime(dr["UpdatedDate"]).ToLocalTime().ToString();

رمز أعلاه يعود الجبل التوقيت حيث server هو ليس بالتوقيت الشرقي حيث المتصفح من تشغيل.كيف يمكننا الحصول على وقت عرض فيها المستخدم ؟

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

المحلول

وكان لي نفس المشكلة. بعنا طلبنا إلى المستخدم الذي كان في منطقة زمنية مختلفة من خادم الويب. نحن لا تخزن أي معلومات في الوقت في UTC، ولكنه كان يعمل في الواقع بشكل صحيح. الوقت المعروض في المنطقة الزمنية للملقم ويعرض بالضبط 3 ساعات خلف. كل ما كان علينا القيام به إضافة قطرة المنطقة الزمنية أسفل حتى يتمكنوا من تحديد المنطقة الزمنية الخاصة بهم للموقع بأكمله (منذ المستخدمين الوحيد من التطبيق سيكون في المنطقة الزمنية الخاصة بهم). نحن ننقذ هذا الإعداد ومن ثم إدراج وظيفة لاتخاذ جميع يعرض التاريخ والوقت وتحويل من منطقة زمنية واحدة إلى أخرى باستخدام مساحة الاسم TimeZoneInfo. وهو يعمل تماما.

نصائح أخرى

التوقيت المحلي دائما على جانب الملقم تحويل إلى الموقع الفعلي.لديك عدد قليل من الخيارات.

  1. تخزين قيمة تعويض من UTC للمستخدمين ، تبقى مرات في UTC
  2. هل تحويل العميل عبر JS (ليس أنيقة, ولا مناسبا ، في رأيي)
  3. نلقي نظرة على بعض MSDN التوصيات و التوقيت مساحة

إذا كنت تستخدم الصافي 3.5 <م> و تعرف المنطقة الزمنية التي كان المستخدم في <لأ href = "http://msdn.microsoft.com/en-us/library/ system.timezoneinfo.aspx "يختلط =" نوفولو noreferrer "> TimeZoneInfo هو صديقك. إذا كنت لا تستخدم الصافي 3.5 هناك بعض العينات P / استدعاء حول الحصول حالات <لأ href = "http://msdn.microsoft.com/en-us/library/system.timezone.aspx" يختلط = "noreferrer نوفولو"> والوقت ، ولكن الامر يستحق تجنب ذلك إذا كنت قد حصلت على الوصول إلى 3.5. (TimeZoneInfo ديه البيانات التاريخية وغيرها، وبشكل عام، هي الطريقة المفضلة للذهاب.)

والآن التثبت التي الزمنية المستخدمون هم في مشكلة مختلفة - أبسط طريقة لتجنب الالتباس هي لمنحهم خيارات. (الحصول على تعويض "الآن" يمنحك سوى معلومات محدودة.)

وأنا واجهت شيئا من هذا القبيل قبل استخدام ASP.NET. كان هنا بلدي المنهجية العامة.

وأنا أرسلت جافا سكريبت للقيام دوكمنت. يحدد جافا سكريبت تعويض العميل من GMT. بحيث يمكنك إرسال وقت معين ومن ثم السماح للجافا سكريبت القيام زائد / ناقص على ذلك.

وفقط دائما تخزين التاريخ والوقت كما شكل GMT.

وهناك 2 الخطوات التالية:

والكشف عن توقيت مختلف في جانب العميل باستخدام جافا سكريبت:

var dt = new Date();
var diffInMinutes = -dt.getTimezoneOffset();

وبعد ذلك في جانب الخادم، C # رمز لتحويل خادم الوقت إلى وقت العميل على أساس توقيت الكشف عن تعويض أعلاه:

string queryStr = Request.QueryString["diffInMinutes"];
int diffInMinutes = 0;
if (Int32.TryParse(queryStr, out diffInMinutes))
{
    clientTime = serverTime.ToUniversalTime().AddMinutes(diffInMinutes);
}

وجرينا في مشكلة واحدة أو متشابهة مع العملاء البعيدين يدعو إلى قاعدة البيانات الخاصة بنا من خلال خدمات ويب حيث قاعدة البيانات والعملاء هي في المناطق الزمنية المختلفة.

ولقد وجدنا أن من الأسهل لإرشاد بيانات للا يهتمون الزمنية حتى لا يتم تغيير الأوقات عبر الحدود الزمنية ...

وبنينا وسيلة فائدة (SetAllDateModes) الذي يحول جميع حقول التاريخ الوقت في ورقة العمل حسب الجدول - هنا نهاية أعمال (Foreach) والدعوة التي تضع dateMode:

foreach (DataColumn dc in dt.Columns)
{
  if (dc.DataType == typeof(DateTime))
  {
    dc.DateTimeMode = dateMode;
  }
}
SetAllDateModes(dt, DataSetDateTime.Unspecified);

وDateSetDateTime.Unspecified لا يتضمن الإزاحة لذلك ليس هناك التحويل.

واعتقد ان الفكرة العامة لعدم توطين التاريخ والوقت حتى يتم تقديمها للمستخدم. ذلك ما لم يكن الإنسان هو الذهاب الى قراءتها، فإنه يبقى في UTC، GMT، CUT. ملاحظة واحدة إضافية تستخدم التاريخ مكتبة / الوقت بحيث لم يكن لديك ما يدعو للقلق الكثير عن مشاكل التوقيت الصيفي تغيير الوقت.

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