What time is it in New York?

N

Nile_Hef

And how far behind Frankfurt are they?

No, it's not as simple as it looks: if I'm lucky enough to be in New York,
or I have the admin rights to tell my machine that it's been shipped to
Manhattan, I can call the API for GetTimeZoneInformation. That'll retrieve a
time difference relative to Greenwich Mean Time and, if I'm somewhere strange
and foreign, it'll even apply the daylight saving adjustments.

But the only locale it can query is 'here', and that's usually London.
Except when people have to run my code in New York, Frankfurt or Hong Kong,
Sydney, Seoul, Tokyo and San Francisco. And they definitely don't have
administrator privileges: all they want to do is retrieve everything prior to
a locally-defined cutoff date and time.

It is possible to enumerate the registry for Time Zone keys under
HKEY_LOCAL_MACHINE
\SOFTWARE
\Microsoft
\Windows NT
\CurrentVersion
\Time Zones

But how do I read the 'TZI' subkey, a REG_BINARY, into a
TIME_ZONE_INFORMATION user-defined type in VB? And if I did, would it be any
use to me?

Anyone else come up with alternative solutions? The USA has time zones, too:
they don't move with the seasons like ours, but a lot of stateside developers
must have met this issue for data replication across state boundaries. It
can't all be hardcoded!
 
N

Nile_Hef

I hadn't seen Chip Pearson's collaboration with his fellow-MVP's on the topic
of Time Zones, and that particular use of GetTimeZoneInformation is an
interesting extension of Chip's own article at
http://www.cpearson.com/excel/timezone.htm

Nevertheless, both articles share the same limitation: the only time zone
identifier you can feed the function is 'This' time zone. I can't run a
computer in London or Hong Kong and pass the parameter 'EST' or equivalent,
expecting the function to return the TZI record with names, offsets and bias
for Eastern Standard Time.

So we're still looking at creating and populating our own hardcoded lists,
rather than extracting the information which we know is in the operating
system. Somewhere.
 
N

Nile_Hef

Thanks for the extra link, decoding the hive - in particular, reading the
registry version of a TIME_ZONE_INFORMATION data structure - was the
information I needed to get the job done.

I'll post my source as soon as I have it tested, as it is probably the only
published VB code for this specific task: a nonlocal date difference function
operating across multiple time zones.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top