技术控

    今日:32| 主题:49249
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] Epoch 知多少

[复制链接]
以后为自己醉 发表于 2016-10-5 16:43:54
73 2

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
国庆假期的头三天去朋友家做客,感受了一下富二代「奢靡腐化」的生活。但是,作为一个想要成为 PPT 架构师的好程序员,即使在假期里,也是要写代码的,这一点古今中外概莫如是。
  我是个程序员,今天我休息。猜猜我在干嘛?虽然我很想告诉你我在巴哈马享受鸡尾酒,但实际上我休假的时候还是在写代码。 因此所谓的“休假”只是对 HR 来说的——我只是放下工作,好专心让我的游戏重新上线。这个游戏我写了快 10 年,开发的时间差不多有 7 年。这个游戏下线已经好一段时间了,现在重新上线,部分原因是为了摆脱那些一直追在我屁股后面的玩家。这至少要花一个星期,所以我只好休一星期的假来搞定它。
   至于我这两天写了什么,都在「 准备再次尝试用 OmniFocus 记录工作并生成周报 」这篇博文里了。之所以不把代码放出来,是因为我觉得这脚本写得太糙快猛,就这么大咧咧的放出来,有损我准 PPT 架构师的光辉形象。
   然而事实证明我不把代码放出来实在是太机智了。到目前为止,我都是用 AppleScript 及其周边技术来实现从 OmniFocus 生成周报的,为了知道 ScriptingBridge 返回的对象有哪些属性哪些方法,还得安装 Xcode 然后参考 这里 那里 搞到了最新的 OmniFocus.h ,这才算是把接口搞清楚了,要不然靠着反射去猜哪些方法是 OmniFocus 的哪些方法是框架自带的,简直要命。
   今天我无意中发现了 OmniFocus 用 SQLite 来持久化数据 这一惊天大秘密,就想着可以找时间把我的周报生成器重写了,绕过 AppleScript,直接读取 SQLite。
  于是我把 OmniFocus 的数据库拷贝出来了一份,先看看表结构。
   
Epoch 知多少-1 (鸡尾酒,巴哈马,程序员,架构师,朋友)

  在生成周报这个需求里,因为是周报,以完成时间为分割线,所以 dateCompleted 这个字段是一个需要重点关注的地方。
  [code]select dateCompleted from Task where projectInfo is NULL and dateCompleted is not NULL;

497156893.964988
497156894.558405
497156895.134153
497156897.265427
497156898.010303
497156898.714034[/code]  这查出来的一坨浮点数是个什么鬼!
  一番探查学习研究提高姿势水平之后,我终于知道了这一坨浮点数是从 2001-01-01 00:00:00 +0000 到目标时间的秒数。
   在之前的计算机科学和软件工程生涯中,我用过的唯一的从 XX 到现在的秒数,就是 UNIX 时间 ,即从 1970-01-01 00:00:00 +0000 到当前时刻的秒数。然而 OmniFocus 给我上了一课,只知道 UNIX 时间是不够的,要想在 macOS 上愉快玩耍,还得知道「OS X 时间」,即从 2001-01-01 00:00:00 +0000 到当前时刻的秒数。
   Wikipedia 的 Epoch (reference date) 页面告诉我们,这个世界上除了被广泛使用的 UNIX 时间,还有其他很多种纪元,比如 Microsoft Excel 使用的纪元从 January 0 , 1900 开始,MATLAB 纪元从 January 0, 1 BC 开始,Apple's Cocoa framework 则是之前说的,从 January 1, 2001 开始。
  看得出来苹果还是蛮自恋的,不过敢认为 OS X 开创了 UNIX 之后的一个新纪元,这想法我很喜欢!
  最后,要想从 OmniFocus 的数据库中查出本地时区下的完成时间,得这么来:
  [code]select datetime(dateCompleted + strftime('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') from Task where projectInfo is NULL and dateCompleted is not NULL ;[/code]
友荐云推荐




上一篇:SGiOSViews
下一篇:Vue 2.0 is Here! The Progressive JavaScript Framework
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

fggfj 发表于 2016-10-25 02:22:19
不回帖的话就太任性了
回复 支持 反对

使用道具 举报

刘松 发表于 2016-11-7 14:14:21
为何要放弃治疗?
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表