2009-06-26 2 views
0

2 자리 연도를 4 자리 연도로 변환하는 알고리즘이 있습니까?Y2K 날짜 변환을 처리하는 데 가장 좋은 방법은 무엇입니까?

저는 C# DateTime으로 변환하려는 두 자리 출생일 (월 및 일과 함께)이 있습니다. 분명히, 생일은 미래에있을 수 없지만 .NET에 2 자리 연도를 4 자리 연도로 변환하는 기존 시설이 있습니까?

+2

눈치 채지 못했을 때를 대비하여 9 년 늦었습니다. –

+1

내가 이야기해야하는 모든 시스템이 Y2K를 준수하는 것은 아닙니다. 모든 시스템이 Y2K를 준수하는 것은 아닙니다. –

답변

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

maxYear은 현재 4 자리 연도 여야합니다.


편집 : 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); 
} 
+0

1 년이 아니라 피벗을 통과한다는 것을 제외하면이 것과 유사한 정적 함수가 내 솔루션이되었습니다. 생년월일의 경우 피벗은 100 년 전입니다. –

1

다양한 시스템들이 기본 데이터 요구 사항에 따라 서로 다른 중단 날짜를 사용합니다. 귀하의 경우에는

, 그것은 가장 가능성이 안전하게 년 09 00 다른 값 반면, (99 10) 당신이 스스로에게 물어야 할 질문은 1900+

있습니다 2000+ 있다고 가정하는 것입니다 무엇을 현재 시스템에 100 세 이상의 사람들이 레코드로있을 가능성입니다.

이 계산을 정확히 한 번 수행하여 저장하고 4 자리 연도를 사용하여 모든 코드를 처리해야합니다.

+0

부수적으로이 링크 (http://www.theiet.org/factfiles/it/dates.cfm?type=pdf)에는 다양한 시스템에 문제를 일으킬 수있는 2001 년부터 2100 년까지의 잠재적 인 날짜 목록이 있습니다. – NotMe

0

사람이 잠재적으로 태어난 2007 년 1 월 3 일이라면 100 년 전에 같은 날 태어 났을 확률이 1/7보다 ​​약간 적습니다. 이 확률이 당신의 취향에 비해 너무 높다면 나이를 저장하지 않는 한 이것을 자동화 할 수있는 좋은 방법이 없다고 생각합니다.

편집 : 당연히,이 확률을 낮추는 수식이 있습니다 (알고리즘 방식을 알면서 알고리즘을 알고 있습니다).하지만 결국에는 저장하지 않으면 잘못된 결과가 나타날 수 있습니다. 그들의 나이.

편집 2 : 물론 나이가 있다면 캘린더 알고리즘이 필요하지 않습니다.

관련 문제