반응형
Excel 시리얼 날짜 번호를 로 변환하려면 어떻게 해야 하나요?NET 날짜 시간?
Excel 시리얼 날짜에서로 변환하려면 어떻게 해야 하나요?NET 날짜 시간?
예를 들어 39938은 05/05/2009입니다.
FromOADate 방법을 사용하면 다음과 같이 간단합니다.
DateTime dt = DateTime.FromOADate(39938);
이 코드 dt는 "05/05/2009" 입니다.
여기서 39938은 1900년 1/1 이후의 일수입니까?
이 경우 프레임워크라이브러리 기능을 사용합니다.
이 함수는 모든 세부 사항을 캡슐화하고 경계 검사를 수행합니다.
그 이력의 가치에 대해서는, 다음과 같이 실장할 수 있는 것은, 다음과 같습니다.
(C#)
public static DateTime FromExcelSerialDate(int SerialDate)
{
if (SerialDate > 59) SerialDate -= 1; //Excel/Lotus 2/29/1900 bug
return new DateTime(1899, 12, 31).AddDays(SerialDate);
}
VB
Public Shared Function FromExcelSerialDate(ByVal SerialDate As Integer) As DateTime
If SerialDate > 59 Then SerialDate -= 1 ' Excel/Lotus 2/29/1900 bug
Return New DateTime(1899, 12, 31).AddDays(SerialDate)
End Function
[갱신] :
음... 간단한 테스트를 해보니 이틀이나 쉬었네요어디가 다른지 모르겠어.
네, 문제가 해결되었습니다.상세한 것에 대하여는, 코멘트를 참조해 주세요.
39938 의 경우는, 다음의 순서에 따릅니다.39938 * 864000000000 + 599264352000000000
864000000000은 59926435200000000000의 하루 틱 수를 나타냅니다.이것은, 0001년부터 1900년까지의 틱 수를 나타냅니다.
void ExcelSerialDateToDMY(int nSerialDate, int &nDay,
int &nMonth, int &nYear)
{
// Excel/Lotus 123 have a bug with 29-02-1900. 1900 is not a
// leap year, but Excel/Lotus 123 think it is...
if (nSerialDate == 60)
{
nDay = 29;
nMonth = 2;
nYear = 1900;
return;
}
else if (nSerialDate < 60)
{
// Because of the 29-02-1900 bug, any serial date
// under 60 is one off... Compensate.
nSerialDate++;
}
// Modified Julian to DMY calculation with an addition of 2415019
int l = nSerialDate + 68569 + 2415019;
int n = int(( 4 * l ) / 146097);
l = l - int(( 146097 * n + 3 ) / 4);
int i = int(( 4000 * ( l + 1 ) ) / 1461001);
l = l - int(( 1461 * i ) / 4) + 31;
int j = int(( 80 * l ) / 2447);
nDay = l - int(( 2447 * j ) / 80);
l = int(j / 11);
nMonth = j + 2 - ( 12 * l );
nYear = 100 * ( n - 49 ) + i + l;
}
재능 있는 사람의 컷앤페이스트...
언급URL : https://stackoverflow.com/questions/727466/how-do-i-convert-an-excel-serial-date-number-to-a-net-datetime
반응형
'programing' 카테고리의 다른 글
WPF 이미지 리소스 저장 (0) | 2023.04.10 |
---|---|
라벨 콘텐츠의 WPF 문자열 형식 (0) | 2023.04.10 |
데이터베이스 전체 SQL-Server 스크립팅 (0) | 2023.04.10 |
OpenSSL: PEM 루틴:PEM_read_bio: 시작선 없음: pem_lib.c:703: 예상: 신뢰할 수 있는 증명서 (0) | 2023.04.10 |
매크로를 사용하여 Excel 워크북의 모든 피벗 테이블 새로 고침 (0) | 2023.04.10 |