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

smo*_*ens 5 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 |
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

rwb*_*rwb 4

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

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