用 %H 格式化时间差

format time difference with %H

如何格式化使用 time-subtract 计算的时差值?考虑这个简单的例子:

(let*
    ((before (current-time))
     (after (progn (sit-for 0.25) (current-time)))
     (diff (time-subtract after before)))
  (insert (format "before: %s--%s\n" before (format-time-string "%Hh%Mm%S.%3Ns" before)))
  (insert (format "after:  %s--%s\n" after (format-time-string "%Hh%Mm%S.%3Ns" after)))
  (insert (format "diff:   %s--%s--%s\n" diff (format-time-string "%s.%3Ns" diff)
                  (format-time-string "%Hh%Mm%S.%3Ns" diff))))

评估它会插入以下内容:

之前:(22616 21856 296901 800000)--13h47m12.296s
之后:(22616 21856 552345 800000)--13h47m12.552s
差异:(0 0 255444 0)--0.255s--16h00m00.255s

两个时间戳相差250ms左右。但是使用 format-time-string 和格式字符串 "%Hh%Mm%S.%3Ns" 对其进行格式化会产生 16。

不应该是0吗?

"16" 来自您所在的时区。

我想如果你这样做 (format-time-string "%Hh%Mm%S.%3Ns" diff 0),你会看到你预期的结果(即 0)。