从SqLite数据库中的INTEGER字段格式化日期(iTunes备份)

时间:2013-10-23 01:31:47

标签: ios sql sqlite itunes

我正在使用SQLite Maestro查看我昨天的iPhone备份文件,日期字段显示INTEGER数字 - 例如我上次短信的日期显示为404076049.如何将其转换为可读的日期时间? 我找到了一个例子SELECT strftime("%m-%d-%Y", date_col, 'unixepoch') AS date_col,但将上述数字转换为12-31-1982,这绝对是错误的(日期应该是昨天的某个时间)

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

Mac使用与UNIX纪元时间不同的“纪元时间”。

UNIX纪元日期是1970年1月1日午夜UTC(又名格林威治标准时间)

Mac OS纪元日期是2001年1月1日午夜UTC。

我不知道如何使用SQL语句将日期从整数格式转换为日期字符串,但我知道如何使用Cocoa执行此操作:

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate: intValue];

您应该能够计算2个日期系统之间的差异,并将其作为转换因子应用:

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

然后,您可以在select语句中使用它之前将“差异”添加到整数值。

答案 1 :(得分:0)

因此,基于Audrey的评论,请在SQL中执行此操作(并在MacOS Mohave中使用新的纳秒级时间戳):

SELECT strftime("%Y-%m-%d", (date / 1000000000) + 978307200, 'unixepoch')
  AS date_1 from message