Connecting Tech Pros Worldwide Forums | Help | Site Map

Get Current Time in Different Timezone

jehugaleahsa@gmail.com
Guest
 
Posts: n/a
#1: Feb 12 '08
Hello:

I would like it so that the time displayed was always for CDT/CDS.
Potentially, the application can be run at locations in Mountain Time
or Central Time. This is what I have now:

// get the UTC offset depending on day light savings
double hourOffset = DateTime.Now.IsDaylightSavingTime() ? -5 : -6;
DateTimeOffset offset =
DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours( hourOffset));

Essentially, is there a way to get the time in a particular timezone
regardless of where the application is run?

Thanks,
Travis

christery@gmail.com
Guest
 
Posts: n/a
#2: Feb 12 '08

re: Get Current Time in Different Timezone


On 12 Feb, 18:34, "jehugalea...@gmail.com" <jehugalea...@gmail.com>
wrote:
Quote:
Hello:
>
I would like it so that the time displayed was always for CDT/CDS.
Potentially, the application can be run at locations in Mountain Time
or Central Time. This is what I have now:
>
*// get the UTC offset depending on day light savings
double hourOffset = DateTime.Now.IsDaylightSavingTime() ? -5 : -6;
DateTimeOffset offset =
DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours( hourOffset));
>
Essentially, is there a way to get the time in a particular timezone
regardless of where the application is run?
>
Thanks,
Travis
I think u need to know where u are,,, and using that knowledge and
accepting that NTP has corrected your clock, dont worry.
OR With user interaction I think that can be a possibility - as in the
user sets the clock right. Without, a GPS would be advisable.
Never heard of mountain time, greenwitch OK but...nah...

//CY
jehugaleahsa@gmail.com
Guest
 
Posts: n/a
#3: Feb 12 '08

re: Get Current Time in Different Timezone


On Feb 12, 10:57*am, christ...@gmail.com wrote:
Quote:
On 12 Feb, 18:34, "jehugalea...@gmail.com" <jehugalea...@gmail.com>
wrote:
>
>
>
>
>
Quote:
Hello:
>
Quote:
I would like it so that the time displayed was always for CDT/CDS.
Potentially, the application can be run at locations in Mountain Time
or Central Time. This is what I have now:
>
Quote:
*// get the UTC offset depending on day light savings
double hourOffset = DateTime.Now.IsDaylightSavingTime() ? -5 : -6;
DateTimeOffset offset =
DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours( hourOffset));
>
Quote:
Essentially, is there a way to get the time in a particular timezone
regardless of where the application is run?
>
Quote:
Thanks,
Travis
>
I think u need to know where u are,,, and using that knowledge and
accepting that NTP has corrected your clock, dont worry.
OR With user interaction I think that can be a possibility - as in the
user sets the clock right. Without, a GPS would be advisable.
Never heard of mountain time, greenwitch OK but...nah...
>
//CY- Hide quoted text -
>
- Show quoted text -
Mountain time? Between Central and Pacific? Anyway, human intervention
is not possible.
Peter Duniho
Guest
 
Posts: n/a
#4: Feb 12 '08

re: Get Current Time in Different Timezone


On Tue, 12 Feb 2008 09:34:50 -0800, jehugaleahsa@gmail.com
<jehugaleahsa@gmail.comwrote:
Quote:
I would like it so that the time displayed was always for CDT/CDS.
Potentially, the application can be run at locations in Mountain Time
or Central Time. This is what I have now:
>
// get the UTC offset depending on day light savings
double hourOffset = DateTime.Now.IsDaylightSavingTime() ? -5 : -6;
DateTimeOffset offset =
DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours( hourOffset));
>
Essentially, is there a way to get the time in a particular timezone
regardless of where the application is run?
There's always a way. :)

However, .NET does not, AFAIK, support this directly. It only knows two
timezones: UTC, and your current local timezone. The API actually _looks_
like it could support multiple timezones, if only there were a way to
instantiate a new timezone object according to something other than the
local settings, but I haven't seen anything like that yet.

So you're stuck doing this manually for now. I would hope that in the
future, .NET will include more broad support for timezones, but that
future isn't here yet as far as I know.

By the way, beware of the use of "IsDaylightSavingTime" when creating
DateTime instances outside the local timezone. It will be relative to the
local timezone, which of course may have different daylight saving time
rules than the target timezone.

Pete
jehugaleahsa@gmail.com
Guest
 
Posts: n/a
#5: Feb 12 '08

re: Get Current Time in Different Timezone


On Feb 12, 12:06*pm, "Peter Duniho" <NpOeStPe...@nnowslpianmk.com>
wrote:
Quote:
On Tue, 12 Feb 2008 09:34:50 -0800, jehugalea...@gmail.com *
>
<jehugalea...@gmail.comwrote:
Quote:
I would like it so that the time displayed was always for CDT/CDS.
Potentially, the application can be run at locations in Mountain Time
or Central Time. This is what I have now:
>
Quote:
*// get the UTC offset depending on day light savings
double hourOffset = DateTime.Now.IsDaylightSavingTime() ? -5 : -6;
DateTimeOffset offset =
DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours( hourOffset));
>
Quote:
Essentially, is there a way to get the time in a particular timezone
regardless of where the application is run?
>
There's always a way. *:)
>
However, .NET does not, AFAIK, support this directly. *It only knows two*
timezones: UTC, and your current local timezone. *The API actually _looks_ *
like it could support multiple timezones, if only there were a way to *
instantiate a new timezone object according to something other than the *
local settings, but I haven't seen anything like that yet.
>
So you're stuck doing this manually for now. *I would hope that in the *
future, .NET will include more broad support for timezones, but that *
future isn't here yet as far as I know.
That stinks. I was reading a post somewhere else where they were using
the registry to get all available Timezones. However, I am not sure
how they figured out UTC offsets from that, nor how they handled Day
Light Savings Time. I will just ignore it.
Quote:
>
By the way, beware of the use of "IsDaylightSavingTime" when creating *
DateTime instances outside the local timezone. *It will be relative to the *
local timezone, which of course may have different daylight saving time *
rules than the target timezone.
Right. This was my biggest problem with my code. I am going to let it
slide for now, since I can guarantee that the program will be in
Mountain or Central time when run. I don't have to worry about there
being alternate timezone rules within the US, I hope!
Quote:
>
Pete
=?ISO-8859-1?Q?Arne_Vajh=F8j?=
Guest
 
Posts: n/a
#6: Feb 13 '08

re: Get Current Time in Different Timezone


jehugaleahsa@gmail.com wrote:
Quote:
On Feb 12, 12:21 pm, Jon Skeet [C# MVP] <sk...@pobox.comwrote:
Quote:
>Peter Duniho <NpOeStPe...@nnowslpianmk.comwrote:
Quote:
>>However, .NET does not, AFAIK, support this directly. It only knows two
>>timezones: UTC, and your current local timezone. The API actually _looks_
>>like it could support multiple timezones, if only there were a way to
>>instantiate a new timezone object according to something other than the
>>local settings, but I haven't seen anything like that yet.
>Fortunately it's available as of .NET 3.5.
>>
>See DateTimeOffset (available in .NET 2.0 SP1) and TimeZoneInfo (3.5).
>
I was reading about that in my Nutshell book. How great it would be to
live in a 3.5 world!
Someone asked about timezone a couple of months ago.

I came up with the following two potential solutions:

public static int GetUTCOffset1(string target)
{
RegistryKey tzs =
Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenS ubKey("Microsoft").OpenSubKey("Windows
NT").OpenSubKey("CurrentVersion").OpenSubKey("Ti me Zones");
foreach(string tzn in tzs.GetSubKeyNames())
{
if(tzn.Contains(target) ||

((string)tzs.OpenSubKey(tzn).GetValue("Display")). Contains(target))
{
return
-BitConverter.ToInt32((byte[])(tzs.OpenSubKey(tzn).GetValue("TZI")), 0);
}
}
throw new ArgumentException("Unknown timezone " + target);
}
public static int GetUTCOffset2(string target)
{
java.util.TimeZone tz = java.util.TimeZone.getTimeZone(target);
return tz.getRawOffset() / 60000;
}

Arne
Claes Bergefall
Guest
 
Posts: n/a
#7: Feb 14 '08

re: Get Current Time in Different Timezone



"Peter Duniho" <NpOeStPeAdM@nnowslpianmk.comwrote in message
news:op.t6ffb3pa8jd0ej@petes-computer.local...
Quote:
On Tue, 12 Feb 2008 11:23:05 -0800, jehugaleahsa@gmail.com
<jehugaleahsa@gmail.comwrote:
>
Quote:
>[...]
>That stinks. I was reading a post somewhere else where they were using
>the registry to get all available Timezones. However, I am not sure
>how they figured out UTC offsets from that, nor how they handled Day
>Light Savings Time. I will just ignore it.
>
I don't recall the format off the top of my head, but the timezone
database in the registry is not all that complicated. Microsoft has a KB
article on their support web site...
You'll find that KB article here:
http://support.microsoft.com/kb/115231

Once you're grabbed all the timezones from the registry you can use
SystemTimeToTzSpecificLocalTime and
TzSpecificLocalTimeToSystemTime to convert betwen UTC and timezone specific
local time

The following code should help:

[DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = false)]
private static extern int SystemTimeToTzSpecificLocalTime(ref
TIME_ZONE_INFORMATION lpTimeZone, ref SYSTEMTIME lpUniversalTIme, out
SYSTEMTIME lpLocalTime);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = false)]
private static extern int TzSpecificLocalTimeToSystemTime(ref
TIME_ZONE_INFORMATION lpTimeZone, ref SYSTEMTIME lpLocalTime, out SYSTEMTIME
lpUniversalTIme);

[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}

//Registry time zone format. See KB article Q115231
[StructLayout(LayoutKind.Sequential)]
private struct REG_TIME_ZONE_INFORMATION
{
public int Bias;
public int StandardBias;
public int DaylightBias;
public SYSTEMTIME StandardDate;
public SYSTEMTIME DaylightDate;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct TIME_ZONE_INFORMATION
{
public int Bias;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string StandardName;
public SYSTEMTIME StandardDate;
public int StandardBias;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string DaylightName;
public SYSTEMTIME DaylightDate;
public int DaylightBias;
}

private static List<TIME_ZONE_INFORMATIONGetTimeZones()
{
List<TIME_ZONE_INFORMATIONlist = new List<TIME_ZONE_INFORMATION>();
RegistryKey key =
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Micros oft\Windows
NT\CurrentVersion\Time Zones");
if (key == null)
return list;

string[] subKeyNames = key.GetSubKeyNames();
foreach (string subKeyName in subKeyNames)
{
RegistryKey subKey = key.OpenSubKey(subKeyName);
if (subKey != null)
{
object value = subKey.GetValue("TZI");
if (value != null)
{
int length =
Marshal.SizeOf(typeof(REG_TIME_ZONE_INFORMATION));
IntPtr p = Marshal.AllocHGlobal(length);
Marshal.Copy((byte[])value, 0, p, length);
REG_TIME_ZONE_INFORMATION rtzi =
(REG_TIME_ZONE_INFORMATION)Marshal.PtrToStructure( p,
typeof(REG_TIME_ZONE_INFORMATION));
Marshal.FreeHGlobal(p);

TIME_ZONE_INFORMATION tzi = new TIME_ZONE_INFORMATION();
tzi.Bias = rtzi.Bias;
tzi.DaylightBias = rtzi.DaylightBias;
tzi.StandardBias = rtzi.StandardBias;
tzi.DaylightDate = rtzi.DaylightDate;
tzi.StandardDate = rtzi.StandardDate;
tzi.DaylightName = (string)subKey.GetValue("Dlt", "");
tzi.StandardName = (string)subKey.GetValue("Std", "");
list.Add(tzi);
}
subKey.Close();
}
}
key.Close();
return list;
}


/claes


Closed Thread