Emacs 计算组织模式表中的约会持续时间

Emacs 计算组织模式表中的约会持续时间,emacs,org-mode,tabular,Emacs,Org Mode,Tabular,我有一份约会清单,格式如下: | Appointment | Dur. | |------------------------------+-------| | <2014-02-20 Thu 09:30-18:30> | ??? | | <2014-02-22 Sat 09:00-10:00> | ??? | | | | |约会|期间| |--------

我有一份约会清单,格式如下:

| Appointment                  | Dur.  |
|------------------------------+-------|
| <2014-02-20 Thu 09:30-18:30> |  ???  |
| <2014-02-22 Sat 09:00-10:00> |  ???  |
|                              |       |
|约会|期间|
|------------------------------+-------|
|  |  ???  |
|  |  ???  |
|                              |       |

如何让orgmode计算约会的持续时间?

Org mode允许您指定计算给定列值的公式。您可以在这些公式中执行elisp代码。我们可以使用功能来实现您想要的第一,我们将需要定义一些功能,发现时间之间的差异。您可以将以下内容添加到您的组织文档中

#+begin_src emacs lisp
(取消我的获取分钟数(时间)
(+(*(第2次)60)(第1次)))
(取消获取时间差(t1 t2)
((我的获取分钟数t1)(我的获取分钟数t2)))
(取消获取持续时间(时间字符串)
(let*((次(拆分字符串(子字符串时间字符串16-1)”-))
(分钟差异(我的获取时间差异(解析时间字符串(n次1次))
(解析时间字符串(第n个0次щщ)'))
(格式“%dhrs%dmins”(/minute diff 60)(%minute diff 60)))
#+结束(src)
然后在
#+begin src emacs lisp
#+end src
标记之间的任意位置执行C-cC-C,这将评估elisp

只需将elisp代码(介于
#+begin#u src emacs lisp
#+end src
)复制到
*scratch*
buffer,然后执行M-x
eval buffer
RET

现在我们已经定义了函数,我们可以告诉org mode从第一列计算第二列的公式,要做到这一点,只需将下面的行粘贴到org表下面

#+TBLFM: $2='(my-get-duration $1)
这告诉org第2列的值(
$2
)是函数
my get duration
应用的“第1列的值”(
$2
)。然后在doc-cC-C行上加上点,如果你做得很好,第二列应该填入持续时间

注意:代码假定datetime的格式与示例中给出的格式相同

我建议您阅读关于组织模式作为电子表格的功能的短文

更新

如果您可以按如下方式重新设置表格格式,则可以简化公式

| Appointment      | Start |   End | Duration |
|------------------+-------+-------+----------|
| <2014-02-20 Thu> | 09:30 | 18:30 | ???      |
| <2014-02-22 Sat> | 09:00 | 10:00 | ???      |

嗨@marian,我已经用另一种解决方案更新了答案。嗨。但这样一来,我的日程上就看不到约会的时间了。@marian,那么也许第一个解决方案对你来说已经足够好了
#+TBLFM: $4=$3-$2;T