2010-05-05 6 views
1

Excelite 일련 번호를 날짜로 변환하는 SQLite를 어떻게 얻을 수 있습니까? 나는 어떻게 든 정수 2009 년 9 월 18 일을 얻는 테이블에 정수 40074를 원하니?엑셀/SQLite 날짜 일련 번호

날짜가 이미 SQLite에 있습니다.

답변

1
sqlite> SELECT DATE('1899-12-30', '+40074 days'); 
2009-09-18 
-1

Excel에서 날짜를 1899 년 12 월 30 일 이후의 일 수로 저장하므로 숫자를 /로 변환하려면 1899 년 12 월 30 일에서 현재 날짜까지의 일 수를 계산하면됩니다. 후. 즉 당신이 작동하지만, 예를 들어 C#을 위해 정확히 어떤 언어에 따라 달라집니다 당신이 다음 작동 것 :

var epoch = new DateTime(1899, 12, 30); 

int number = 40074; 
var date = epoch.AddDays(number); 
Console.WriteLine(date); 

var date = new DateTime(1987, 5, 3); 
int number = (int) date.Subtract(epoch).TotalDays; 
Console.WriteLine(number); 

을 (기준시가 30/12/1899을 왜 당신이 궁금해하는 경우입니다 실제 시대는 1900 있어야하지만, 엑셀 잘못 1900 윤년)

+0

죄송합니다. 저는 SQLite에서 작업하는 것에 대해 구체적으로 질문했습니다. 나는 시스템을 이해하거나 다른 언어로 작업하는 데 아무런 문제가 없다. (파이썬은 내가 좋아하는 것이다.) –

+1

동일한 원칙이 적용됩니다. 그것은 단지 다른 문법입니다. – dan04

+1

사실 1900 년을 윤년으로 가정하면서 1900 년 1 월 1 일을 신기원으로 사용한 것은 Lotus 123이었습니다. Excel (VBScript)의 경우이 기능을 사용하여 시대를 되돌려 놓았습니다. 1919 년 2 월 29 일 이후의 모든 날짜에 대해 엑셀과 로터스 123은 서로 다른 날짜 이전에 동의합니다 (그러나 엑셀이 실제로 존재합니다). –

2

이것은 작동하는 것 같다 것을 가정하기 때문에 : 난 그냥 추측,

sqlite> SELECT DATETIME((49400 * 3600 * 24) - 3014928000, 'unixepoch'); 
2009-09-18 00:00:00 

을 솔직히이과에 확인 거기에 상수가 있지만, 간단한 수학이 있다고 확신합니다. 그것을 백업해라.

신기원보다 일찍 일어나는 것처럼 보이지만 철저히 테스트하지는 않았습니다.