الطريقة المفضلة للتعامل مع التحويلات تاريخ Y2K؟

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

سؤال

هل هناك خوارزمية المفضل لتحويل السنة 2-أرقام في السنة 4 أرقام؟

ولدي موعد الولادة 2-أرقام (جنبا إلى جنب مع الشهر واليوم) التي أريد تحويله إلى C # DateTime. Obiviously، يمكن تواريخ ميلاد لا يكون في المستقبل، ولكن هناك المنشأة الموجودة في .NET لتحويل السنة 2-أرقام في السنة أربعة أرقام؟

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

المحلول

static int GetFourDigitYear(int year, int maxYear) 
{
    System.Globalization.GregorianCalendar cal = 
          new System.Globalization.GregorianCalendar();
    cal.TwoDigitYearMax = maxYear;
    return cal.ToFourDigitYear(year);
}

وينبغي أن يكون maxYear الحالي سنة من أربعة أرقام.


تعديل : في حل OP و:

static int GetFourDigitYear(int year, int pivot) 
{
    System.Globalization.GregorianCalendar cal = 
          new System.Globalization.GregorianCalendar();
    cal.TwoDigitYearMax = new DateTime.Year + (100-pivot);
    return cal.ToFourDigitYear(year);
}

نصائح أخرى

وأنظمة مختلفة تستخدم مواعيد نقطة توقف مختلفة اعتمادا على متطلبات البيانات الأساسية الخاصة بهم.

في قضيتك، هو الأكثر آمنة المرجح أن نفترض أن السنوات 00 إلى 09 هي 2000+ حين أية قيم أخرى (10 إلى 99) هي 1900 +

والسؤال عليك أن تسأل نفسك هو: ما هو احتمال وجود كبار السن 100+ العام مع سجلات حاليا في النظام الخاص بك

.

ويتعين عليك أن تفعل هذا الحساب مرة واحدة بالضبط، واحفظها، وكلها من التعليمات البرمجية للمضي قدما باستخدام 4 أرقام سنوات.

وكان يمكن أن يحدث لي أنه إذا كان الشخص potentiall ولد 3 يناير 2007 أن احتمال أنهم ولدوا في نفس اليوم من الاسبوع الماضي 100 سنة أقل قليلا من 1/7. إذا كان هذا الاحتمال مرتفع جدا بالنسبة ترضيك، ثم أنني أشك أن هناك وسيلة جيدة لأتمتة هذا إلا إذا كنت أيضا تخزين سنهم.

وتحرير: بالطبع، هناك صيغة (مع العلم حسابيا كيف يعمل تقويم) التي من شأنها خفض هذا الاحتمال ... ولكن في النهاية، كنت لا تزال عرضة لبعض النتائج المخطئين إذا كنت لا تخزن بها العمر.

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

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