2012-04-10 5 views
0

배경 (무시/건너 뛰기 확인) :(MS) DateTime을 Int로 인코딩하는 더 좋은 방법이 있습니까?

내가하고있는 일을하는 더 좋은 방법이 있어야한다고 생각하지만 그게 뭔지 모르겠다. 내 솔루션이 작동한다고 생각하지만 더 우아하고 빠르거나 다른 무엇인가가있는 경우에 대비해서 내가 물어볼 줄 알았다.

Html.DropDownList를 사용하는 MS Razor MVC로 웹 페이지를 개발하고 있습니다. 선택 목록 UI 컨트롤은 선택 항목을 표시 문자열로 정수 ID 코드에 매핑합니다. (이라고 생각합니다. 문자열을 DateTime 값으로 매핑 할 수 있습니다.)

두 경우에 DateTime 개체로 저장되는 날짜 중에서 선택하고 싶습니다. ID 코드를 DateTime 값과 관련시키는 또 다른 테이블을 메모리에서 만들 수 있다는 것을 알았지 만 대신 (그리고 웹 페이지의 성가심에 대한 또 다른 해결 방법으로 날짜를 int로 인코딩하려고 할 수도 있기 때문에) 생각했습니다. 날짜를 int로.

는 문제 : 가장 다음 int 값으로 DateTime 개체의 날짜를 변환하는 방법을

나중에 다시 인코딩 INT에서 해당 날짜에 날짜 시간의 날짜를 설정합니다. 내 솔루션의 주요 추함은 DateTime은 읽기 전용 DayOfYear 함수를 제공하지만 날짜를 (Date, DayOfYear)로 설정하는 방법은 알 수 없으므로 루프가있는 메소드를 작성했습니다.이 메소드는 귀엽지 만 느려질 수 있습니다. .

MY 현재 (OK) 해결책 :

public int encodeDate(DateTime date) 
    { 
     return ((date.Year - 2012) * 400) + date.DayOfYear; 
    } 

    public DateTime decodeDateCode(int dateCode) 
    { 
     int year = (dateCode/400) + 2012; 
     int day = dateCode % 400; 
     // MS DateTime doesn't provide a direct reverse conversion for DayOfYear, so find it: 
     int month = 1; 
     int mThresh = DateTime.DaysInMonth(year, month); 
     while (day > mThresh) 
     { 
      day -= mThresh; 
      month++; 
      mThresh = DateTime.DaysInMonth(year, month); 
     } 
     DateTime dateValue = new DateTime(year, month, day); 
     return dateValue; 
    } 

답변

1

호 (http://en.wikipedia.org/wiki/Unix_time를 참조 POSIX 시간/유닉스 시간) POSIX 시간으로 타임 스탬프를 포맷하는 방법에 대한?

나는 비슷한 문제 나 자신이 있고 여기에 좋은 해결책을 발견 : 링크에서 Convert a Unix timestamp to a .NET DateTime

:

DateTime ConvertFromUnixTimestamp(double timestamp) 
{ 

} 


double ConvertToUnixTimestamp(DateTime date) 
{ 

} 
+0

정말 감사합니다. 그것은 더 빨리 실행되어야하며, 웹 세션을 위해서만 생겨 현재 사건에 관한 것이기 때문에 1970 년보다 최근의 한 해 이후로 틱 할 수도 있습니다. – Dronz

관련 문제