我在这个SQLite文件中处理什么样的时间戳?

时间:2012-07-09 02:30:34

标签: macos datetime sqlite

很久以前,另一位用户写道,他正在创建一个库,直接从The Hit List中读取数据

https://groups.google.com/d/msg/the-hit-list-users/arCPzjHaZeg/J6eatDiJWB4J

看起来他没有放过任何东西。

我正在考虑直接阅读THL的库,与geektool脚本一起使用,以避免Applecript的开销总是不得不在THL中读取数据。

我已经完成了部分工作,找到了尚未完成的任务

SELECT * FROM ZTASK where ZCOMPLETEDDATE is NULL ;

但是当我尝试将其限制为仅现在为DUE的任务时,我感到困惑。如果我查看任务模式,我看到ZDUEDATE是一个时间戳

sqlite> .schema ztask
  

创建表ZTASK(Z_PK INTEGER PRIMARY KEY,Z_ENT INTEGER,Z_OPT INTEGER,ZARCHIVED INTEGER,ZPRIORITY INTEGER,ZNOTES INTEGER,ZPARENTLIST INTEGER,ZPARENTTASK INTEGER,ZRECURRENCE INTEGER,ZACTUALTIME FLOAT,ZCOMPLETEDDATE TIMESTAMP,ZCREATEDDATE TIMESTAMP,ZDISPLAYORDER FLOAT,ZDUEDATE TIMESTAMP ,ZESTIMATEDTIME FLOAT,ZMODIFIEDDATE TIMESTAMP,ZSTARTDATE TIMESTAMP,ZCALENDARSTOREUID VARCHAR,ZNOTESUID VARCHAR,ZSTATUS VARCHAR,ZTITLE VARCHAR,ZUID VARCHAR,ZLOCALINFODICTIONARY BLOB);

虽然当我尝试查询时,我似乎无法弄清楚它是什么样的时间戳。它似乎不是unixtime或juliantime。

例如

sqlite> SELECT * FROM ZTASK where ZCOMPLETEDDATE is NULL ;
...
ZDUEDATE = 363422378
...

从Hit List的UI显示2012-07-07的截止日期但似乎不匹配

Unix time: 1341619200
Julian time: 2456115.5

还有其他建议吗?

2 个答案:

答案 0 :(得分:2)

这是格林尼治标准时间2001年1月1日以来的秒数。我自己没有选择这个值,这是Core Data和Cocoa保存日期的方式。

例如,您问题中363422378的值大约为11。5年:

363422378秒/ 60/60/24/365 = 11.524048009

答案 1 :(得分:0)

这看起来像OS X绝对参考日期以来的秒数:

  

The interval between the receiver and the system’s absolute reference date (the first instant of 1 January 2001, GMT). If the receiver is earlier than the reference date, the value is negative.

提供常量NSTimeIntervalSince1970 [t]从1970年1月1日到参考日期2001年1月1日的秒数。它的值为{{ 1}}。

相关问题