سؤال

تخزين كل شيء في GMT ؟

تخزين كل شيء كما كان دخلت مع جزءا لا يتجزأ من تعويض?

تفعل الرياضيات في كل مرة كنت الحلم ؟

عرض النسبية تايمز "1 دقيقة مضت"?

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

المحلول

يجب أن تخزن في UTC - إذا كنت لا ، التاريخية التقارير والسلوك خلال أشياء مثل التوقيت الصيفي يذهب...مضحك.GMT هو بالتوقيت المحلي ، رهنا التوقيت الصيفي مقارنة بالتوقيت العالمي (الذي هو).

عرض المستخدمين في مختلف المناطق الزمنية يمكن أن اللقيط إذا كنت تخزين بالتوقيت المحلي.فإنه من السهل على التكيف المحلية إذا كانت البيانات الخام في UTC - فقط إضافة المستخدم الخاص بك تعويض والانتهاء من ذلك!

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

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

الآن, كما أن العرض:بالتأكيد, يمكنك أن تفعل "3 دقائق" الشيء, ولكن فقط إذا كنت مخزن UTC - وإلا البيانات التي تم إدخالها في المناطق الزمنية المختلفة سوف تفعل أشياء مثل عرض "-4 ساعات" ، والتي سوف تفزع الناسإذا كنت تنوي عرض الوقت الفعلي, الناس يحبون أن يكون ذلك في الوقت المحلي - وإذا البيانات التي يتم إدخالها في العديد من المناطق الزمنية يمكنك فقط القيام بذلك بسهولة إذا كنت تخزين UTC.

نصائح أخرى

الجواب دائما هو "يتوقف".

ذلك يعتمد على ما كنت تصف مع الوقت ، وكيف كانت البيانات المقدمة لك.مفتاح تحديد كيفية تخزين الوقت القيم هو تحديد ما إذا كنت تفقد المعلومات من خلال إسقاط التوقيت ، وكذلك ليس من المستغرب المستخدمين.

وهناك فوائد محددة في تخزين البيانات في UTC time_t - هو واحد من الباحث ، مما يسمح الفرز السريع وسهلة التخزين.

أرى المشكلة كما يجري تقسيمها إلى مجالات محددة:

  1. البيانات التاريخية
  2. المستقبل على المدى القصير البيانات
  3. المستقبل على المدى الطويل البيانات

التالية فرعية في كل منها:

  1. نظام توفير
  2. المقدمة من قبل المستخدم

دعونا نلقي نظرة على واحد في وقت واحد.

نظام توفير:أنصح تشغيل نظم في UTC, ثم يمكنك تجنب التوقيت المشكلة مرة أخرى ، أي فقدان المعلومات ينظر (دائما UTC).

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

المستقبل على المدى الطويل البيانات:هذه هي الأحداث التي إما أن تكون كافية في المستقبل أو سوف يحدث.إذا كان يتم الاحتفاظ بها في جميع أنحاء طويلة بما فيه الكفاية ، التوقيت واصفات ويضمن التغيير.مثال جيد على هذا النوع من البيانات هو "الأسبوعية إدارة الجلسة".هذه هي البيانات التي يتم إدخالها مرة واحدة ، و من المتوقع أن نستمر في العمل إلى الأبد.هذه القيم ، من المهم تحديد ما إذا كان النظام أو المستخدم المقدمة.على المستخدم توفير بيانات الوقت يجب أن يتم تخزين مع الخالق التوقيت, أي شيء آخر النتائج في فقدان المعلومات.هذه المعلومات الخسارة يصبح واضحا عندما التوقيت تعريف التغييرات يتم عرض الوقت إلى الخالق بأنها مختلفة تماما قيمة!

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

المستقبل على المدى القصير البيانات:هذه هي البيانات التي سرعان ما سوف تصبح التاريخية ، أو صالحة فقط لفترة قصيرة من الوقت.أمثلة يمكن أن يكون الفاصل الزمني توقيت, تصنيف التحولات ، إلخ.للحصول على هذه البيانات منذ احتمال انخفاض هذا التعريف سوف تتغير بين خلق قيمة الوقت يصبح التاريخية ، قد يكون من الممكن الحصول على بعيدا مع اسقاط التوقيت.إلا أنني وجدت أن هذه القيم عادة سيئة أصبحت "المستقبل البيانات على المدى الطويل".

مرة كنت قد قررت لتخزين التوقيت ، يجب توخي الحذر مع كيفية تخزينها.

  • لا تقم بتخزين التوقيت بمثابة تعويض أو كامل واصف.

إذا قمت بتخزين التوقيت بمثابة تعويض ماذا تفعل إذا كان التوقيت التغييرات ؟ هل تذهب من خلال النظام بطانية تغيير على البيانات الموجودة ؟ إذا كان لديك الآن أي القيم التاريخية غير صحيحة.ومن الأمثلة الجيدة على هذا الخطأ هي أوراكل و iCal.أوراكل مخازن معلومات التوقيت بمثابة تعويض من شركة يو تي سي ، كال يشمل كامل واصف لإنشاء التوقيت.

  • هل متجر على أنها اسم.

يسمح هذا تعريف التوقيت للتغيير دون الحاجة إلى تعديل القيم الموجودة لديك.فإنه جعل الفرز أكثر صعوبة, لأن أي مؤشر على أن يتم إنشاؤها قد تكون غير صالحة إذا كان التوقيت تغييرات البيانات.

إذا المطورين الاستمرار في تخزين كل شيء في UTC بغض النظر عن التوقيت ، وسوف نستمر في رؤية المشاكل التي شهدناها مع الدفعة الأخيرة من تغييرات التوقيت.

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

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

النظر في حالة تكرار التعيين.ويحدث ذلك في GMT 0000 (البساطة) ، وهو 1200 NZST (نيوزيلندا الوقت القياسي) و 1000 بتوقيت جرينتش في سيدني أستراليا.

عندما الصيفي حيز التنفيذ في منطقة واحدة ، ما يجب أن تحدث الموعد ؟ يجب أن:

1a.إذا TZ التغيير في المنطقة تعيين في "مالك" (الذين حجزت) ثم محاولة البقاء في نفس مكتب على مدار الساعة مع الوقت (على سبيل المثال 10:00 صباحا)?
1b.إذا كان TZ تغيير في واحدة من الأخرى اجتماع الحضور المناطق ثم لا تغيير

النتائج:وهو يتحرك على أي شخص آخر ، بشكل غير متوقع بسبب أصحاب TZ التغيير ، ولكن يبقى "في الساعة 10 صباحا اجتماع" بقدر ما مالك المعنية.

'2.كما المذكورة أعلاه, ولكن عكسه.

النتائج:وهو يتحرك الاجتماع مالك (من الساعة 10 صباحا اجتماع يصبح الساعة 9 صباحا الاجتماع ، أو v/v), والذي قد يكون من المتوقع ولكن غير مريح.فإنه يبقى في نفس مكتب على مدار الساعة وقت الحضور الأخرى حتى أنها تذهب من خلال الخاصة بهم TZ انتقالية.

لا هو الكمال.النظر في حالة اثنين من التعيينات واحد حجزها من قبل الشخص الذي يحدث في الساعة 10 صباحا بالتوقيت المحلي ، أخرى تم حجزها من قبل الشخص ب مع شخص مثل أحد الحضور الذي يحدث في الساعة 9 صباحا.إذا كان الشخص A و B الشخص في مختلف TZ ثم تغيير التوقيت الصيفي يمكن بسهولة أن يسبب لهم تصبح حجزت.

إذا عقلك هو عازمة قليلا عند هذه النقطة ثم أنا أفهم تماما.

نقطة وراء هذا المثال هو أن يفعل أي من هذه السلوكيات بشكل صحيح تحتاج إلى معرفة ليس فقط UTC نسخة من بالتوقيت المحلي ، ولكن TZ (لا تعوض) أن مالك كان عند حجزها.وإلا لا يوجد لديك خيار سوى أن تأخذ الخيار 2, بصمت, دون حتى إبلاغ أي شخص أن الأمور قد تغيرت منذ GMT مرات لا تغير فقط عرض التغييرات ؟ (لا, هذا هو الفخ عرض المسائل عند الساعة 10 صباحا اجتماع يتحرك من تلقاء نفسه)

يجب أن الائتمان زميلي وصديقي جيسون بولوك عن هذه الرؤية.قراءة رأيه هنا, و متابعة مناقشة كال VTIMEZONE هنا

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

بعض ceveats:

  1. إذا كان الوقت هو فقط كما هو محدد في ساعة حائط الوقت و هذا هو الرائدة في التمثيل, ثم هو لا على الاطلاق الوقت المحدد.يجب أن (لا) تحويله في أي GMT التمثيل.E. G.9:00 صباحا كل صباح.وبعبارة أخرى:هذا ليس (تاريخ)مرة.
  2. إذا كنت حفظ التاريخ والوقت في المستقبل تعيين, يجب عليك استخدام إزاحة GMT المحدد من قبل الإدخال التوقيت ، لحظة في وقت نفسها.حتى إذا حان موعد في الصيف مصنوعة في فصل الشتاء في مثلأوروبا الغربية ، فمن +2:00 صباحا ، اللثوغ العادي (التوقيت الشتوي) إزاحة +1:00.وهذا حل تقويم المشكلة التي Bwooce المذكورة.
  3. طبعا نفس وينطبق ذلك على الصحيح ، تعويض في حين تحويل GMT ينطبق عند تحويل مرة أخرى إلى التاريخ والوقت في أي التوقيت.

لحسن الحظ, عندما تستخدم بشكل صحيح ، (.صافي) والوقت نوع يأخذ الرعاية من كل التفاصيل من الحفاظ على التقويمات.... الخلك كل هذا ينبغي أن يكون من السهل جدا عندما كنت تعرف كيف يعمل.

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

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

لذا أجريت تجربة قليلا مع MSSQL server.

أنا خلقت الجدول و إضافة صف واحد مع التيار مترجمة التوقيت (أستراليا).ثم غيرت التاريخ والوقت إلى أن بتوقيت غرينتش إضافة صف آخر.

حتى ثو تلك الصفوف تم اضافته في 10 ثوان عن بعضها البعض ، فإنها تظهر في SQL server كما ثو انهم 10 ساعات.

إذا أي شيء آخر ، فإنه على الأقل يقول لي بأنني يجب أن يتم تخزين التواريخ في conisitent الطريقة التي بالنسبة لي ، يضيف وزن حجة لتخزين لهم بتوقيت جرينتش.

MS Dynamics مخازن GMT ثم على مستوى المستخدم يعرف مرات المنطقة مقارنة بتوقيت جرينتش.ثم يعرض البنود في المنطقة الزمنية الخاصة بك.

فكرت في رمي أن هناك كما كبيرا جدا في مرض التصلب العصبي المتعدد و هذه هي الطريقة التي قررت التعامل معها.

أنا أفضل لتخزين كل شيء مع التوقيت.يمكن للعميل أن يقرر الطريقة التي ينبغي تقديمها في وقت لاحق.بلدي المفضل مكتبة لتحويل هو كيو-قاعدة البيانات.

نظرة هنا ، w3c قد فعلت بعمل ممتاز في الإجابة على السؤال.

ننظر في حالات الاستخدام.

http://www.w3.org/TR/timezone/

علما أنها المستحسن تخزين datetimes كما UTC لا GMT, بتوقيت جرينتش يخضع التوقيت الصيفي.

أنا مثل تخزين في جرينيتش و تظهر فقط النسبية ("حوالي 10 ثوان قبل", "5 أشهر").المستخدمين لا تحتاج إلى رؤية الفعلية الطوابع معظم حالات الاستخدام.

ومن المؤكد أن هناك استثناءات ، و طلب فردي قد يكون الكثير منهم, لذلك لا يمكن أن يكون 'واحد صحيح-طريقة الإجابة.الأشياء التي تحتاج إلى مراجعة قوية-القدرة (مثلا ، التصويت) ، حيث نظم الوقت هو جزء من المجال الخطاب (علم الفلك ، البحث العلمي) قد الطلب الحقيقي الطوابع الزمنية إلى أن تظهر للمستخدم.

معظم التطبيقات ، على الرغم من الأسهل فهم بسيط النسبية الوقت.

عادة ما تستخدم Unix الوقت.ليس بالضرورة مستقبل آمن ، ولكنه يعمل بشكل جيد جدا.

دائما متجر في جرينيتش (أو UTC).من هناك فمن السهل تحويل أي المنطقة الزمنية المحلية قيمة.

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

ولكن لا ينخدع هذا الاعتقاد يعمل 100 ٪ من الوقت في جميع الحالات في كل وقت.فإنه لا يفعل ذلك.

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