2010-05-04 9 views
-2

I utilisé p/Invoke méthode GetSystemTime() dans ma demande pour obtenir l'heure de la date actuelle du système, mais il donne des valeurs erronées une solution pour ce ..p/Invoke méthode GetSystemTime() donne la mauvaise sortie

+4

Si vous acceptez les réponses à vos questions, les personnes seront plus susceptibles de vouloir répondre aux questions suivantes. – Syntactic

+1

Veuillez préciser quel problème vous rencontrez exactement. Et, bien sûr, commencez à marquer quelques réponses! – Shaihi

Répondre

3

Pourquoi n'utilisez-vous pas DateTime.Now?

+0

Il voudrait utiliser 'DateTime.UtcNow' pour cela. – MusiGenesis

+0

Je pensais qu'il disait que les "valeurs" étaient fausses parce qu'il s'attendait à ce que la date soit dans son fuseau horaire, et non UTC - mais j'espère que nous aurons des retours de lui. – thelost

+1

Je suis sûr que nous allons - il est évidemment très bon à propos de la sélection des réponses à ses questions. :) – MusiGenesis

2

Quel est le problème?

Votre signature p/invoke est-elle correcte?

Est-ce que vous êtes structuré correctement? Comment traitez-vous le pointeur de struct étant «retourné»?

2

Si l'heure renvoyée est décalée d'une heure, vous rencontrez un bug de l'heure avancée (qui peut être corrigé avec un hotfix).

GetSystemTime Renvoie le temps universel coordonné (UTC). Vous cherchez peut-être juste l'heure locale, auquel cas vous voulez appeler GetLocalTime à la place (ou simplement utiliser DateTime.Now ou DateTime.UtcNow, et passer les choses PInvoke).

+0

merci .. GetLocaltime() et SetLocalTime() ont résolu mon problème – Sundar

1

Que voulez-vous dire par de fausses valeurs?
Étant donné que vous posez des questions sur Windows CE, il se peut que votre système n'enregistre pas le RTC et qu'il ne se synchronise pas au démarrage, ce qui se traduit par une absence d'heure correcte.
Ceci est spécifique à la plate-forme. L'heure et la date sont-elles correctes dans la barre des tâches (en supposant que vous l'ayez dans l'image)?

6

Ah, l'heure et le CF et WinCE. Ce que c'est drôle! Avec toutes les autres réponses fines que vous avez reçues il y a d'autres choses à savoir:

  1. Les OS magasins LocalTime, pas UTC si GetSystemTime finit par obtenir LocalTime et de les ajuster en fonction que vers l'arrière sur votre fuseau horaire et l'heure d'été, alors Si l'heure locale est correcte mais que SystemTime ne l'est pas, vous avez un réglage TZ ou DST incorrect.
  2. DST peut ou ne peut pas être juste en raison de congrès changer, donc un QFE peut être exigée par l'OEM
  3. DST peut être activé ou désactivé dans le Registre
  4. Le CF met en cache le biais de fuseau horaire que démarrage, si bien l'ajustement du fuseau horaire rend DateTime.Now incorrect jusqu'à ce que vous redémarriez votre application
  5. Tous les périphériques ne peuvent pas persister pendant une coupure de courant (ou même une réinitialisation)
  6. Le temps «flottera» tout au long de la journée. la durée (en millisecondes à secondes) dépend de la mise en œuvre matérielle réelle
+0

D'autres bonnes raisons de travailler dans CF/WinMo au lieu d'une autre plate-forme? :) – MusiGenesis