Author |
Topic |
|
dcx
35 Posts |
Posted - 01 Nov 2004 : 15:45:27
|
I have tried using SetTimeZoneInformation on my Graphics Client Plus (.NET 4.2), but it seems like no matter what value I put in, it always sets it to GMT. Is there a way around this? I want something similar to the CE system set Date/Time dialogue that can be called from my app so that when running without the desktop the user can set the date/time (and time zone) correctly. |
|
ctacke
877 Posts |
Posted - 01 Nov 2004 : 16:21:15
|
Once you set the time zone, the shell must be notified by broadcasting a WM_SETTINGSCHANGE message to the system. Be aware that if you change this while a managed app runs, the managed app does *not* know, and a call to something like DateTime.Now will not reflect the new bias you set. If you need to query the time again, you *must* P/Invoke GetLocalTime. |
|
|
dcx
35 Posts |
Posted - 03 Nov 2004 : 13:07:48
|
I tried this and it doesn't seem to work. I was incorrect before, it appears to be stuck at Pacific time (GMT-8 hours). I did SetTimeZoneInformation, setting the desired bias, sent WM_SETTINGCHANGE, and then called GetLocalTime. The timezone is still off when I open the windows date/time properties. How do I change the timezone and get it to stick? Am I making the proper calls? |
|
|
ctacke
877 Posts |
Posted - 03 Nov 2004 : 17:55:46
|
The shell/app is responsible for setting the text as well as the bias. Setting the bias to -7 doesn't automatically set the text to Mountain, you have to do that as well. |
|
|
dcx
35 Posts |
Posted - 04 Nov 2004 : 11:47:31
|
I am confused, where would I be setting this text? After I do what I described above, the windows time is 8 hours off (in my app and in win ce), so I opened the win ce date/time system property and see that it is still Pacific Time. |
|
|
ctacke
877 Posts |
Posted - 05 Nov 2004 : 09:55:50
|
Yes, it is confusing. Really the best example is the source for the existing control panel applet because it's not a simple or straightforward process. Take a look in the datetime.cpp file, which if you have a default directory install of PB resides at C:\WINCE420\PUBLIC\WCESHELLFE\OAK\CTLPNL\CPLMAIN\datetime.cpp |
|
|
dcx
35 Posts |
Posted - 05 Nov 2004 : 16:38:44
|
Thanks, that helped to clarify things quite a bit.
There isn't a way to call this control panel app (date/time) when running without the desktop is there? |
|
|
akidder
1519 Posts |
Posted - 10 Nov 2004 : 12:26:46
|
You might be able to call the applet, but it's probably better to do it programmatically. Would you like us to send you an evaluation version of Platform Builder? You could take a look at the datetime.cpp code that way. |
|
|
dcx
35 Posts |
Posted - 23 Nov 2004 : 14:30:20
|
Thanks I downloaded the evaluation version. |
|
|
mplaum
11 Posts |
Posted - 13 Jun 2007 : 12:53:25
|
You might want to try this:
The current timezone information is kept in a private static member of the TimeZone class called currentTimeZone. It is initialized once and then reused. The way to force it to refresh is to set it to null: ------------------ In C++:
using System.Reflection; FieldInfo fi = typeof(TimeZone).GetField("currentTimeZone", BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance);
fi.SetValue(null, null); ------------------ In VB:
Imports System.Reflection
Dim tz as TimeZone = TimeZone.CurrentTimeZone
Dim fi as FieldInfo = tz.GetType().GetField("currentTimeZone", BindingFlags.NonPublic OR BindingFlags.Static OR BindingFlags.Instance)
fi.SetValue(Nothing, Nothing)
------------------
Next time any time-formatting (or other timezone-dependent call is made), the CF will re-read the current TZ info from the operating system.
|
Edited by - mplaum on 13 Jun 2007 12:54:11 |
|
|
Jim Najpauer
9 Posts |
Posted - 14 Jun 2007 : 08:32:48
|
Quite interesting
Did you know that when the "Date/Time Properties" window is accessed and the 'OK' button is simply selected (i.e. without changing (applying) any information) a NOTIFICATION_EVENT_TZ_CHANGE (ref: Notify.h) will be generated.
The above occurs on our GCX with build 4.20.21 |
|
|
ctacke
877 Posts |
Posted - 14 Jun 2007 : 10:46:12
|
Yes, but the CLR doesn't look for that notification. Since it has no mechanism to internally change the TZ, it doesn't seem to believe it ever will change. |
|
|
|
Topic |
|