2013-10-23 1 views
2

어제 iPhone 백업 파일을 SQLite Maestro를 사용하여보고 있는데 날짜 필드에 INTEGER 숫자가 표시됩니다. 마지막 SMS 메시지의 날짜는 404076049로 표시됩니다. 어떻게 읽을 수있는 datetime으로 변환합니까? 어딘가에 예제가 있습니다. SELECT strftime("%m-%d-%Y", date_col, 'unixepoch') AS date_col하지만 그 숫자는 12-31-1982로 바뀌 었습니다. 정확히 틀린 데 (어제 시간이 어제 일 것임)SqLite 데이터베이스의 INTEGER 필드에서 날짜 형식 지정 (iTunes 백업)

아이디어가 있으십니까?

답변

4

Mac은 UNIX 신기원 시간과 다른 "획기적 시간"을 사용합니다.

유닉스 시대 날짜

는 1970 년 1 월 1 일 UTC (일명 그리니치 표준시)

맥 OS의 시대 날짜가 년 1 월 1 일 자정 2001 년 UTC입니다.

코코아를 나는 SQL 문을 사용하여 날짜 문자열을 정수 형식에서 날짜를 변환하는 방법을 몰라,하지만 난 사용하여 작업을 수행하는 방법을 알고 :

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate: intValue]; 

당신은 차이를 계산 할 수 있어야한다 두 날짜 시스템 사이에 다음과 같이 변환 요소로 적용하십시오.

NSDate *date = [NSDate date]; 
NSTimeInterval secondsSince2001 = [date timeIntervalSinceReferenceDate]; 
NSTimeInterval secondsSince1970 = [date timeIntervalSince1970]; 
long int difference = trunc(secondsSince2001 - secondsSince1970); 

그런 다음 select 문에서 사용하기 전에 정수 값에 "difference"를 추가 할 수 있습니다.

+0

나는 SQL에서 그것을 필요로하지만 설명을 주셔서 감사합니다. – Andrey

+3

하지만 당신은 저에게 아이디어를주었습니다. 두 epoh 날짜의 차이는 978,307,200 초입니다. 그래서, 그것을 INT 날짜에 추가 할 수 있습니다 :'SELECT strftime ("% m- % d- % Y", 날짜 + 978307200, 'unixepoch') AS date_1'. 나는 너의 대답을 확인하고있다, 고마워! – Andrey

+0

Andrey의 SQL이 잘 돌아갔습니다. 텍스트 메시지 기록에서 메시지 로그를 작성하고 있습니다.이 메시지 기록은 내 iPhone 백업에서 가져 왔습니다. 아이폰은 각 메시지의 실제 타임 스탬프를 표시하지 않는 것은 어리석은 짓이다.하지만이 방법을 사용하면 정확한 시간에 스프레드 시트로 직접 내보낼 수있다. –