2009-06-12 9 views
5

Primo, background: Ho un'applicazione .NET che viene eseguita in modalità kiosk su dispositivi Windows Mobile 6 (IPAQ 210s). Il nostro software traccia effettivamente il fuso orario dell'utente indipendentemente dal sistema operativo, quindi calcoliamo l'ora visualizzata in base all'aggiustamento del fuso orario da UTC. Come molti potrebbero sapere, la modalità vero chiosco non è facile da ottenere su Windows Mobile 6, e il pezzo finale del puzzle per questa app è la soppressione delle notifiche dell'ora legale dal sistema operativo.Impostazione del fuso orario con Compact Framework su Windows Mobile 6

La mia soluzione preferita a questo sarebbe impostare il fuso orario del dispositivo su GMT Casablanca, poiché non osserva l'ora legale. Ho scoperto, tuttavia, che nonostante i miei migliori sforzi (compreso l'uso della libreria OpenNETCF) non riesco a far sì che il fuso orario resti fedele durante il processo di provisioning dei dispositivi. Nell'applet data/ora nel sistema operativo, lo sembra come il fuso orario è GMT, ma il tempo è uno fuori da quello che dovrebbe essere per quel fuso orario.

Qualcuno può offrire consigli su come far sì che la modifica del fuso orario si attacchi correttamente? O, meglio ancora, qualcuno sa come disabilitare la notifica DST su WinMob 6?

risposta

1

È possibile impostarlo nel registro. Basta impostare il valore HKLM \ Time \ TimeZoneInformation. C'è anche una funzione che è possibile bloccare: SetTimeZoneInformation.

+1

Il registro è specifico per Windows CE, credo. Proverò comunque la chiamata p/invoke. – bjanaszek

+0

La chiave di registro funziona anche per i dispositivi Windows Mobile. L'ho usato in passato. Ma il pinvoke è probabilmente la soluzione consigliata. –

1

Ho anche riscontrato un errore durante il cambio di fusi orari ma in eVC non ancora CF. Alla fine, ho deciso che era stato causato cambiando il fuso orario del dispositivo da un fuso orario che era in DST già in un fuso orario che non era in ora legale. Sembrava funzionare correttamente per i mesi dell'anno in cui eravamo in orario standard, ma non ci siamo riusciti quando eravamo in orario legale. Molto noioso.

Alla fine, ho finito per impostare il fuso orario e le volte due volte. Era (di solito) corretto la seconda volta.

0

Ho riscontrato lo stesso errore DST off-by-one-hour in Windows Mobile 5. Il problema sembra essere correlato al sistema operativo anziché a .NET, poiché stavo utilizzando la chiamata all'API SetSystemTime sul dispositivo , passando il valore del server DateTime.UtcNow (che era sempre preciso e mai spento di un'ora). Non sono mai riuscito a rintracciare ulteriormente il problema, perché abbiamo preso la decisione di mantenere tutti i dispositivi impostati sullo stesso fuso orario del server. L'errore si è verificato solo durante l'impostazione dell'ora del sistema su un dispositivo impostato su un fuso orario diverso rispetto al server.

Non ho mai visto questo problema segnalato da nessuna parte, nonostante le numerose ricerche, il che significa che una delle seguenti condizioni:

  1. utenti di dispositivi WinMo maggior impostare il proprio tempo ed il fuso orario manualmente, quindi questo problema non viene mai su
  2. Il problema è specifico della build piuttosto che specifico del sistema operativo (il problema che ho riscontrato era su un iPAQ, ma non ricordo se ho provato a riprodurre il problema su un dispositivo diverso)
  3. I'm clinicamente insano, e questo mai realmente accaduto
3

Per qualsiasi motivo, la CF memorizza effettivamente le informazioni sul fuso orario all'avvio (penso che anche il framework completo lo faccia). Quindi quando si apportano modifiche al fuso orario, la CF non è a conoscenza di tali modifiche. Se utilizzi le API GetSystem/LocalTime, riceverai il momento giusto, ma DateTime.Now non rifletterà tali modifiche.

I reported this back in 2004.

Sul desktop si dispone del metodo TimezoneInfo.ClearCachedInfo, ma non esiste nella CF.

Problemi correlati