POSIX timezone (was Re: date command shows time 20 minutes into future)
Corinna Vinschen
corinna-cygwin@cygwin.com
Fri Jan 27 19:39:00 GMT 2012
On Jan 27 13:16, Christopher Faylor wrote:
> On Fri, Jan 27, 2012 at 05:39:52PM +0100, Corinna Vinschen wrote:
> >On Jan 27 17:02, Corinna Vinschen wrote:
> >> On Jan 27 14:54, Cliff Hones wrote:
> >> > I think the CEST comes from Windows. If you don't have TZ set,
> >> > I think Cygwin turns the timezone names Windows provides into
> >> > abbreviated names by taking the leading letters.
> >> >
> >> > So Windows "Central European Standard Time" => CEST
> >> > and "Central European Daylight Time" => CEDT
> >> >
> >> > I've never liked this - arguably Windows is wrong to use non-standard
> >> > naming for the timezones. It's even worse for us in the UK - we get
> >> > GMTST and GMTDT - ugh. [UK may be a little unusual, but perfectly
> >> > reasonable in using GMT and BST.]
> >>
> >> Uh, right. Thanks for reminding me. The problem is of course that we
> >> only have this information source, if the environment variable TZ isn't
> >> set. Worse, the Windows timezone name is potentially language dependent.
> >> Therefore a simple translation table is not sufficient. It would require
> >> some registry scanning. Setting TZ is much simpler.
> >
> >Does anybody here think it would be a good idea if Cygwin generates a
> >valid TZ setting if TZ isn't set in the environment when started from a
> >native process?
> >
> >There is a table from Windows timezone key names as used in the registry
> >to TZIDs as used by POSIX on unicode.org(*). The mechanism in pseudo
> >code would look like this:
> >
> >- TZ set? All is well.
> >- Otherwise checkout HKLM/SYSTEM/CCS/Control/TimeZoneInformation
> > - Does value TimeZoneKeyName exist?
> > Yes (Vista and later) -> Use as keyname
> > No (pre-Vista) -> x = StandardName
> > - Iterate over keys under HKLM/Software/MSFT/Win NT/CV/TimeZones
> > - If x[0] == '@' test if x == MUI_Std
> > else test if x == Std
> > if so, keyname = name of containing key
> >- GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, region);
> >- Map keyname and region to TZID according to table from unicode.org.
> >- set TZ=mapped_TZID
> >
> >Advantage: Always having a valid POSIX timezone information
> >Disadvantage: Takes time every time we start up the first Cygwin process
> >in a process tree. Not a lot on Vista and later, though.
>
> I think it would be better to have a program in the distro which could
> set the timezone from Windows given the above. It could be run when
> needed in a startup script, avoiding the need for Cygwin programs to
> incur a potentially unneeded performance penalty if TZ is not set.
>
> export TZ=`wintz`
> setenv TZ `wintz`
Good idea. I try to come up with something over the weekend.
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat
More information about the Cygwin-developers
mailing list