【发布时间】:2009-09-18 23:55:09
【问题描述】:
我有来自两个组织文件/子树的相关任务,其中一些时钟时间重叠。这些是手动工作日志和生成的 git 提交日志,见下文。
一个子树的 CLOCK:需要调整条目以消除重叠时间。另一个子树被认为是完整的,它是 CLOCK: 条目不应该被调整。
编辑:这个问题是关于计算新的时间间隔以消除任何重叠。任何建议都不需要解析 Org 模式文件格式。 Python datetime.datetime 算法很有帮助,无论是否使用 Org 模式函数,Emacs Lisp 也是如此。
在 Python(更熟悉)或 Emacs Lisp(Org 函数可以提供帮助)中,我想:
识别时间重叠的地方 发生。 file1.org 将是可变的, file2.org 时间间隔应该是 被认为是固定的/正确的。
计算新的时间间隔 时钟:file1.org 中的行 删除任何重叠 file2.org CLOCK:行。
写入生成的新时钟:行 出局,或者至少是相关的 日期时间。
python 便捷函数 tsparse 将 Org Mode 时间戳转换为 python datetime.datetime 对象:
>>> from datetime import datetime, timedelta
>>> def tsparse(timestring): return datetime.strptime(timestring,'%Y-%m-%d %a %H:%M')
>>> tsparse('2008-10-15 Wed 00:45')
datetime.datetime(2008, 10, 15, 0, 45)
测试用例可以在下面找到。感谢您为 Python 或 Emacs Lisp 提供任何算法或实现建议。
杰夫
file1.org,调整之前:
* Manually Edited Worklog
** DONE Onsite
CLOSED: [2009-09-09 Wed 15:00]
:LOGBOOK:
CLOCK: [2009-09-09 Wed 07:00]--[2009-09-09 Wed 15:00] => 8:00
:END:
** DONE Onsite
CLOSED: [2009-09-10 Wed 15:00]
:LOGBOOK:
CLOCK: [2009-09-10 Thu 08:00]--[2009-09-10 Thu 15:00] => 7:00
:END:
file2.org:
* Generated commit log
** DONE Commit 1 :partial:overlap:leading:contained:
CLOSED: [2009-09-09 Tue 10:18]
:LOGBOOK:
CLOCK: [2009-09-09 Wed 06:40]--[2009-09-09 Wed 07:18] => 0:38
CLOCK: [2009-09-09 Wed 10:12]--[2009-09-09 Wed 10:18] => 0:06
:END:
** DONE Commit 2 :contained:overlap:contiguous:
CLOSED: [2009-09-09 Wed 10:20]
:LOGBOOK:
CLOCK: [2009-09-09 Wed 10:18]--[2009-09-09 Wed 10:20] => 0:02
:END:
** DONE Commit 4 :contained:overlap:
CLOSED: [2009-09-10 Wed 09:53]
:LOGBOOK:
CLOCK: [2009-09-10 Wed 09:49]--[2009-09-10 Wed 09:53] => 0:04
:END:
** DONE Commit 5 :partial:overlap:trailing:
CLOSED: [2009-09-10 Wed 15:12]
:LOGBOOK:
CLOCK: [2009-09-10 Wed 14:45]--[2009-09-10 Wed 15:12] => 0:27
:END:
** DONE Commit 6 :partial:overlap:leading:
CLOSED: [2009-09-11 Fri 08:05]
:LOGBOOK:
CLOCK: [2009-09-11 Fri 07:50]--[2009-09-11 Fri 08:05] => 0:15
:END:
** DONE Commit 7 :nonoverlap:
CLOSED: [2009-09-11 Fri 15:55]
:LOGBOOK:
CLOCK: [2009-09-11 Fri 15:25]--[2009-09-11 Fri 15:55] => 0:30
:END:
file1.org,调整后:
* Manually Edited Worklog
** DONE Onsite
CLOSED: [2009-09-09 Wed 15:00]
:LOGBOOK:
CLOCK: [2009-09-09 Wed 10:20]--[2009-09-09 Wed 14:45] => 4:25
CLOCK: [2009-09-09 Wed 07:18]--[2009-09-09 Wed 10:12] => 2:54
:END:
** DONE Onsite
CLOSED: [2009-09-10 Wed 15:00]
:LOGBOOK:
CLOCK: [2009-09-10 Thu 08:05]--[2009-09-10 Thu 15:00] => 6:55
:END:
【问题讨论】:
标签: python datetime emacs overlap org-mode