如何在emacs表中计算睡眠持续时间?

时间:2012-09-26 22:21:27

标签: emacs org-mode

我有一个表格,其中包含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 |

当我应用表公式:#+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

如何调整此公式以便返回正确的睡眠时间?

请注意,为了计算睡眠持续时间,我有一个if语句,根据Bedtime的值不同地计算睡眠持续时间。如果就寝时间在12小时之前,则加入睡前和醒来时间。如果就寝时间超过12小时,则首先将Bedtime减去24并随后添加到Waketime

1 个答案:

答案 0 :(得分:4)

这是一个hack,因为org-mode在创建公式时似乎不理解calc的HMS表示法,但在这里你是:

   #+TBLFM: $4=if($3 - (12 * 3600) < 0, (24 * 3600), 0) + $2 - $3;T