我有一个表格,其中包含Date,Waketime和Bedtime作为输入.基于这些数据,我想计算前一天晚上的睡眠持续时间.您可以在下面看到我想要获得的表的示例:
| Date | Waketime | Bedtime | Sleep |
| <2012-09-24 Mon> | 6:00 | 22:00 | |
| <2012-09-25 Tue> | 8:00 | 01:00 | 10:00 |
| <2012-09-26 Wed> | 7:00 | 23:00 | 6:00 |
Run Code Online (Sandbox Code Playgroud)
当我应用表公式时:#+TBLFM: $4=if((24-$3)<12, (24-$3)+@-1$2, $3+@-1$2);t由于整数(24,12 ...)被解释为秒,因此不会给出想要的结果.
错误的结果:
| Date | Waketime | Bedtime | Sleep |
| <2012-09-24 Mon> | 6:00 | 22:00 | |
| <2012-09-25 Tue> | 8:00 | 01:00 | 5.01 |
| <2012-09-26 Wed> | 7:00 | 23:00 | -14.99 |
#+TBLFM: $4=if((24-$3)<12, (24-$3)+@-1$2, $3+@-1$2);t
Run Code Online (Sandbox Code Playgroud)
如何调整此公式以使其返回正确的睡眠持续时间?
请注意,为了计算睡眠持续时间,我有一个if语句,根据Bedtime的值不同地计算睡眠持续时间.如果就寝时间在12小时之前,则加入睡前和醒来时间.如果就寝时间超过12小时,则首先将Bedtime减去24,然后加入Waketime
这是一个 hack,因为 org-mode 在创建公式时似乎不理解 calc 的 HMS 表示法,但你在这里:
#+TBLFM: $4=if($3 - (12 * 3600) < 0, (24 * 3600), 0) + $2 - $3;T
Run Code Online (Sandbox Code Playgroud)