Subject: 28.1; Timezone conversion sometimes wrong for recurring events, when importing ical to diary

From: Martin Apel <[email-masked]>
Date: Tue, 21 Jun 2022 16:21:56 +0200

When importing the attached minimal ical file using icalendar-import-file, the resulting time is off by one hour. The problem probably lies somewhere in icalendar--convert-recurring-to-diary, but I couldn't pinpoint the exact location.
The only meeting in the attached icalendar file is defined in timezone 'America/New_York' at 10 am. It shows up in my diary (which is timezone 'Europe/Berlin') at 3pm, even though the time difference between the two timezones is 6 hours.

To reproduce, save the attached file somewhere and execute the following command:

(icalendar-import-file "~/calendar_issue.ical" "~/test.diary")

after adjusting the paths as necessary.

In GNU Emacs 28.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.24, cairo version 1.16.0)
 of 2022-04-05 built on LP5-MAL1-CEM
Repository revision: 5a223c7f2ef4c31abbd46367b6ea83cd19d30aa7
Repository branch: HEAD
Windowing system distributor 'HC-Consult', version 11.0.12009000
System Description: Debian GNU/Linux 11 (bullseye)

Configured using:
 'configure --program-suffix=-28 --with-x-toolkit=gtk3 --with-json --with-native-compilation --with-xwidgets CC=gcc-10
 PKG_CONFIG_PATH=/opt/rh/devtoolset-8/root/usr/lib64/pkgconfig'

Configured features:
CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON LIBOTF LIBSELINUX LIBXML2 MODULES NATIVE_COMP
NOTIFY INOTIFY PDUMPER PNG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM XWIDGETS GTK3 ZLIB

Important settings:
  value of $LANG: en_US.UTF8
  locale-coding-system: utf-8-unix

Major mode: Diary

Minor modes in effect:
  dap-tooltip-mode: t
  dap-ui-many-windows-mode: t
  dap-ui-controls-mode: t
  dap-ui-mode: t
  treemacs-filewatch-mode: t
  treemacs-follow-mode: t
  treemacs-git-mode: t
  treemacs-fringe-indicator-mode: t
  company-box-mode: t
  global-git-commit-mode: t
  global-hl-line-mode: t
  gud-tooltip-mode: t
  global-auto-revert-mode: t
  org-msg-mode: t
  keyfreq-autosave-mode: t
  keyfreq-mode: t
  dap-auto-configure-mode: t
  dap-mode: t
  doom-modeline-mode: t
  marginalia-mode: t
  savehist-mode: t
  vertico-mode: t
  global-company-mode: t
  company-mode: t
  shell-dirtrack-mode: t
  projectile-mode: t
  modern-c++-font-lock-global-mode: t
  auto-compile-on-load-mode: t
  auto-compile-on-save-mode: t
  which-key-mode: t
  desktop-save-mode: t
  org-roam-db-autosync-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/home/martin/.emacs.d/el-get/transient/lisp/transient hides /usr/local/share/emacs/28.1/lisp/transient
/home/martin/.emacs.d/el-get/gdb-mi/gdb-mi hides /usr/local/share/emacs/28.1/lisp/progmodes/gdb-mi

Features:
(shadow emacsbug ivy-hydra cl-print edebug backtrace cal-coptic cal-julian todo-mode midnight cal-x cal-tex cal-html
gnutls mailalias guess-language org-indent image-file image-converter mhtml-mode css-mode-expansions css-mode
js-mode-expansions js html-mode-expansions sgml-mode facemenu cmake-mode rst bug-reference expand-region
subword-mode-expansions text-mode-expansions cc-mode-expansions the-org-mode-expansions er-basic-expansions
expand-region-core expand-region-custom find-file dabbrev vc ediff-vers ediff ediff-merg ediff-mult ediff-wind
ediff-diff ediff-help ediff-init ediff-util cus-start swiper ivy delsel ivy-faces ivy-overlay colir two-column shortdoc
help-fns deadgrep magit-extras cal-move qp sort smiley shr-color mail-extr org-duration cal-iso ace-window orderless
org-jira org-jira-sdk jiralib soap-client rng-xsd rng-dt rng-util xsd-regexp org-clock ox-beamer make-mode ol-eww eww
xdg url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-search eieio-opt speedbar ezimage dframe
ol-docview ol-bibtex ol-bbdb ol-w3m ol-doi org-link-doi dired-aux lsp-headerline lsp-icons dap-mouse dap-ui gdb-mi
gdb-module bui bui-list bui-info bui-entry bui-core bui-history bui-button bui-utils lsp-lens lsp-ui lsp-ui-flycheck
lsp-ui-doc xwidget treemacs-bookmarks magit-bookmark bookmark lsp-ui-imenu lsp-ui-peek lsp-ui-sideline lsp-ui-util
lsp-yaml lsp-xml lsp-pyls lsp-php lsp-perl lsp-json lsp-javascript lsp-groovy lsp-dockerfile lsp-cmake lsp-clangd
lsp-bash face-remap lsp-treemacs lsp-treemacs-themes treemacs treemacs-header-line treemacs-compatibility treemacs-mode
treemacs-interface treemacs-extensions treemacs-mouse-interface treemacs-tags treemacs-persistence
treemacs-filewatch-mode treemacs-follow-mode treemacs-rendering treemacs-async treemacs-workspaces treemacs-dom
treemacs-visuals treemacs-fringe-indicator treemacs-scope pulse treemacs-faces treemacs-icons treemacs-themes
treemacs-core-utils pfuture treemacs-logging treemacs-customization treemacs-macros mm-archive url-cache csh-mode
sh-script smie executable checkdoc hi-lock lsp-completion lsp-diagnostics lsp-modeline flycheck idle-highlight-mode
cwarn flyspell ispell cap-words superword subword smartscan company-box company-box-doc frame-local company-box-icons
cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs mu4e-alert time alert mu4e
mu4e-org mu4e-main mu4e-view mu4e-view-gnus mu4e-view-common mu4e-headers mu4e-compose mu4e-context mu4e-draft
mu4e-actions ido rfc2368 smtpmail sendmail mu4e-mark mu4e-proc mu4e-utils doc-view image-mode exif mu4e-lists
mu4e-message flow-fill mu4e-vars mu4e-meta epa-file atl-stash magit-submodule magit-obsolete magit-popup magit-blame
magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit
magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs
magit-status magit magit-repos magit-apply magit-wip magit-log which-func magit-diff smerge-mode diff git-commit
log-edit pcvs-util add-log magit-core magit-margin magit-transient magit-process with-editor magit-mode transient
request hl-line server magit-autorevert magit-git magit-utils crm gud autorevert ma-funcs notifications hideshow org-msg
ox-pandoc ox-org ox-md ox-latex ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox htmlize gnus-msg
gnus-icalendar icalendar gnus-dired gnus-cite gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum shr kinsoku
svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo
gnus-spec gnus-int gnus-range message rfc822 mml mml-sec epa derived mm-decode mm-bodies mm-encode mailabbrev gmm-utils
mailheader gnus-win gnus nnheader gnus-util rmail rmail-loaddefs mail-utils cus-edit cus-load keyfreq dap-gdb-lldb
dap-cpptools dap-utils dap-mode dap-launch posframe dap-overlays lsp-mode lsp-protocol yasnippet tree-widget wid-edit
spinner network-stream markdown-mode color inline imenu ht filenotify ewoc epg rfc6068 epg-config modus-vivendi-theme
modus-operandi-theme modus-themes doom-modeline doom-modeline-segments doom-modeline-env doom-modeline-core shrink-path
f s all-the-icons all-the-icons-faces data-material data-weathericons data-octicons data-fileicons data-faicons
data-alltheicons marginalia savehist vertico company-oddmuse company-keywords company-etags etags fileloop xref project
company-gtags company-dabbrev-code company-dabbrev company-files company-clang company-capf company-cmake
company-semantic company-template company-bbdb company pcase tramp-cache tramp-sh tramp tramp-loaddefs trampver
tramp-integration files-x tramp-compat shell parse-time ls-lisp projectile grep compile text-property-search ibuf-ext
ibuffer ibuffer-loaddefs diminish persistent-soft list-utils pcache eieio-base jka-compr font-utils unicode-fonts
modern-cpp-font-lock auto-compile packed which-key desktop frameset autoinsert link-hint ffap goto-addr thingatpt avy
hydra lv german-holidays view mule-util cal-china lunar solar cal-dst cal-bahai cal-islam cal-hebrew holidays
hol-loaddefs vc-git diff-mode vc-dispatcher appt diary-lib diary-loaddefs http-post-simple comp comp-cstr warnings
org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id org-roam-node org-roam-db org-roam-utils
org-roam-compat org-roam org-capture org-element avl-tree generator org-attach org-id org-refile org org-macro
org-footnote org-pcomplete pcomplete org-list org-faces org-entities noutline outline easy-mmode org-version ob-ditaa
ob-dot ob ob-tangle org-src ob-ref ob-lob ob-table ob-exp ob-comint comint ansi-color ring ob-emacs-lisp ob-core ob-eval
org-table oc-basic bibtex iso8601 time-date ol org-keys oc org-compat org-macs org-loaddefs format-spec find-func
cal-menu calendar cal-loaddefs emacsql-sqlite url-http url-auth url-gw nsm rmc puny advice emacsql emacsql-compiler
magit-section dash org-bullets edmacro kmacro cl rx el-get el-get-autoloading el-get-list-packages el-get-dependencies
el-get-build el-get-status pp el-get-methods el-get-fossil el-get-svn el-get-pacman el-get-github-zip el-get-github-tar
el-get-http-zip el-get-http-tar el-get-hg el-get-go el-get-git-svn el-get-fink el-get-emacswiki el-get-http
el-get-notify el-get-emacsmirror el-get-github el-get-git el-get-elpa el-get-darcs el-get-cvs el-get-bzr el-get-brew
el-get-builtin el-get-apt-get el-get-recipes el-get-byte-compile el-get-custom cl-extra help-mode el-get-core autoload
radix-tree lisp-mnt mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr dired dired-loaddefs finder-inf
package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util mailcap
url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map
url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib iso-transl tooltip eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame
minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button loaddefs faces
cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads xwidget-internal dbusbind inotify dynamic-setting system-font-setting
font-render-setting cairo move-toolbar gtk x-toolkit x multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 1949620 1340398)
 (symbols 48 74123 27)
 (strings 32 730752 148594)
 (string-bytes 1 40969210)
 (vectors 16 187176)
 (vector-slots 8 3754720 1237337)
 (floats 8 3048 11198)
 (intervals 56 71264 32672)
 (buffers 992 224))