Thank you for this. I haven't yet compared the code with what's currently in NetBSD, but I immediately noticed that there's no mention that a null pointer may be passed instead of a timezone_t, and this is a shorthand for UTC. Here are some extract's from NetBSD's ctime(3) man page to illustrate what I mean: FUNCTIONS [...] ctime_rz(tz, clock, buf) The ctime_rz() function is similar to ctime_r(), but it also takes a const timezone_t argument, as returned by a previous call to tzalloc(), or a null pointer denoting Coordinated Universal Time (UTC). localtime_rz(tz, clock, result) The localtime_rz() function is similar to localtime_r(), but it also takes a const timezone_t argument, returned by a previous call to tzalloc(), or a null pointer denoting Coordinated Universal Time (UTC). mktime_z(tz, tm) The mktime_z() function is similar to mktime() but it also takes a const timezone_t argument, returned by a previous call to tzalloc(), or a null pointer denoting Coordinated Universal Time (UTC). tzalloc(zone) The tzalloc() function takes as an argument a timezone name and returns a timezone_t object suitable to be used in the ctime_rz(), localtime_rz(), and mktime_z() functions. A null pointer may be passed to tzalloc() instead of a timezone name, to refer to Coordinated Universal Time (UTC). Note that instead of setting the environment variable TZ, and globally changing the behavior of the calling program, one can use multiple timezones at the same time by using separate timezone_t objects allocated by tzalloc() and calling the ``z'' variants of the functions. RETURN VALUES [...] o The tzalloc() function returns a pointer to a timezone_t object or NULL on failure, setting errno to indicate the error. It may also return NULL when the name argument is NULL, and this is not an error, but a way of referring to Coordinated Universal Time (UTC). --apb (Alan Barrett)