On 14/05/2024 19:56, Ihor Radchenko wrote:
Max Nikulin writes:

+(defun org-time-inc (unit value time)
Is there a chance that support of intervals like 1h20m will be required
later?

Not sure again. I simply used ts-inc function signature from Adam's
ts.el as reference.

ts.el has `ts-adjust' that may change several fields. I had in mind specification of time interval from RFC5545 iCalendar P4h20m.

+            (if (memq unit '(day month year))
+                nil ; Avoid auto-adjustments of time when jumping across DST.

Sorry, but you have to use -1, otherwise

(format-time-string
   "%F %T %Z %z"
   (encode-time '(0 30 12 15 1 2000 'ignored nil "Africa/Juba"))
   "Africa/Juba")
(error "Specified time is not representable")

Hmm. I am not sure if it is a real problem in practice.

You are right. When you are using TZ as integer offset from UTC, `encode-time' does not signal any error. It ignores DST. However it is the case of conversion to local time a timestamp with arbitrary explicit offset, e.g. taken from a Date email header. So my example is wrong for current patch revision, but the code needs a fix.

You need to get local timestamp for given local time. You should use -1 for DST and nil for TZ.

In some cases it may cause change like 1:30 to 2:30, but it is not worse than date drift from 31 to 30 or even 28.

The reason why I forced DST nil is hysteresis of glibc when dealing with
DST transitions:

As I wrote yesterday, you example is unrelated to glibc hysteresis. The reliable way to deal with ambiguous time close to time transition is to have get next transition function for given timezone and a way to resolve ambiguous time (DST can not help in some cases). Heuristics with trying a day before and a day after should work, but it may impact performance.

Your patch allows users to choose if they prefer May, 31 to July, 1 or to July, 30 drift. It may be an improvement some of them.

I think, they actually expect choice to get June, 30 and July, 31 or to ignore June since it has 30 days only.


Reply via email to