Subject: 30.2; world-clock silently and incorrectly parses invalid time zone

From: "Jorge P. de Morais Neto" <[email-masked]>
Date: Fri, 12 Sep 2025 13:04:32 -0300

Hello, Emacs comrades!

>From `emacs -Q':

1. Invoke M-x world-clock to load the required Elisp libraries
2. Customize `zoneinfo-style-world-list' to "(("Europe/Pisa" "Pisa"))".
   Set for session.
3. Invoke M-x world-clock again.
4. It says "Pisa sexta 12 setembro 15:50 Europe" (current time is 15:50
   UTC).

I asked a friend in Pisa the local time and he reported the error.  I
then realized world-clock said "Europe" instead of "Europe/Pisa".  I
suspected "Europe/Pisa" is an invalid timezone name, so I looked into
Gnome settings widget, and indeed Italy's only timezone is
"Europe/Rome".  I then fixed `zoneinfo-style-world-list'.

Emacs /silently/ parsed "Europe/Pisa" as "Europe", inducing the user
into error.  Yes, a previous user error caused the situation, but modern
UX should detect and report predictable user errors, and typing an
invalid timezone name is pretty predictable.

Kind regards,
  Jorge

In GNU Emacs 30.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.49,
 cairo version 1.18.4) of 2025-08-14 built on localhost
System Description: Gentoo Linux

Configured using:
 'configure --prefix=/usr --build=x86_64-pc-linux-gnu
 --host=x86_64-pc-linux-gnu --mandir=/usr/share/man
 --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
 --localstatedir=/var/lib --datarootdir=/usr/share
 --disable-silent-rules --docdir=/usr/share/doc/emacs-30.2
 --htmldir=/usr/share/doc/emacs-30.2/html --libdir=/usr/lib64
 --program-suffix=-emacs-30 --includedir=/usr/include/emacs-30
 --infodir=/usr/share/info/emacs-30 --localstatedir=/var
 --enable-locallisppath=/etc/emacs:/usr/share/emacs/site-lisp
 --without-compress-install --without-hesiod --without-pop
 --with-file-notification=inotify --with-pdumper --enable-acl
 --enable-xattr --with-dbus --with-modules --without-gameuser
 --with-libgmp --with-gpm --with-native-compilation=aot
 --without-kerberos --without-kerberos5 --with-lcms2 --with-xml2
 --with-mailutils --without-selinux --with-sqlite3 --with-gnutls
 --with-libsystemd --with-threads --with-tree-sitter --without-wide-int
 --with-sound=alsa --with-zlib --with-pgtk --without-x --without-ns
 --with-toolkit-scroll-bars --without-gconf --without-xwidgets
 --without-gsettings --with-harfbuzz --without-libotf --without-m17n-flt
 --with-gif --with-jpeg --with-png --with-rsvg --with-tiff --with-webp
 --with-imagemagick --with-dumping=pdumper 'CFLAGS=-march=native -O2
 -fvect-cost-model=cheap -flto -pipe -Werror=odr
 -Werror=lto-type-mismatch -Werror=strict-aliasing -fno-fast-math
 -ffp-contract=off' 'CPPFLAGS= -DUSE_VALGRIND=no' 'LDFLAGS=-march=native
 -O2 -fvect-cost-model=cheap -flto -pipe -Werror=odr
 -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,-O1
 -Wl,--as-needed -Wl,-z,pack-relative-relocs''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM HARFBUZZ IMAGEMAGICK
JPEG LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER
PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP XIM GTK3 ZLIB

Important settings:
  value of $EMACSLOADPATH: /home/jorge/.guix-profile/share/emacs/site-lisp:
  value of $LC_MONETARY: pt_BR.UTF-8
  value of $LC_NUMERIC: pt_BR.UTF-8
  value of $LC_TIME: pt_BR.UTF-8
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: World clock

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date subr-x mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils tabify
thingatpt help-fns radix-tree help-mode cus-edit pp cus-start cus-load
icons wid-edit cl-loaddefs cl-lib time rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/pgtk-win pgtk-win term/common-win touch-screen
pgtk-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
nadvice seq simple cl-generic indonesian philippine 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 abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads dbusbind inotify dynamic-setting font-render-setting cairo gtk
pgtk lcms2 multi-tty move-toolbar make-network-process native-compile
emacs)

Memory information:
((conses 16 82756 9452) (symbols 48 8099 0) (strings 32 20847 2155)
 (string-bytes 1 616667) (vectors 16 11102)
 (vector-slots 8 152004 9768) (floats 8 32 38) (intervals 56 410 23)
 (buffers 992 14))

-- 
- We live in capitalism.  Its power seems inescapable.  So did the
  divine right of kings. (Ursula K. Le Guin)