J'ai un problème avec le MonoTouch UidatePicker étant 1 heure de retard. Je pense que c'est à faire avec des fuseaux horaires ou quelque chose de similaire. J'ai essayé de définir explicitement le fuseau horaire et les paramètres régionaux de mon UidatePicker, mais cela ne semble pas aider. dans le gestionnaire ValueChageed, la ligne suivante retourne une valeur 1 heure plus tôt que le temps Sélectionné dans l'interface utilisateur: P> datePicker.Locale.LocaleIdentifier;
datePicker.DatePicker.TimeZone;
3 Réponses :
Après var date = DateTime ... code>, ajoutez ce qui suit:
Le temps d'épargne du jour n'est pas toujours ajusté d'une heure. Timeanddate.com/Time/dst Infiniteundo.com/post/25509354022/...
En effet. C'est une solution rapide. Je préfère être presque correct que complètement faux, pour ainsi dire. Vous pouvez bien sûr utiliser un décalage de DST basé sur le fuseau horaire. Avez-vous une belle proposition pour cela? J'aime le deuxième lien, mais cela ne donne aucune réponse; seulement indique que nous portons des idées fausses.
La réponse est dans ma réponse ci-dessous. Utilisez DateFormatter, il s'occupe de DST pour vous.
Oui, mais seulement lors de la sortie de texte
TimeZoneInfo.ConvertiTimeFromutc retourne DateTime.
Ce code magique corrige tous mes problèmes avec des économies de jour et des fuseaux horaires. Ecrivez si vous avez besoin d'aide.
NSDate sourceDate = date; NSTimeZone sourceTimeZone = new NSTimeZone ("UTC"); NSTimeZone destinationTimeZone = NSTimeZone.LocalTimeZone; int sourceGMTOffset = sourceTimeZone.SecondsFromGMT (sourceDate); int destinationGMTOffset = destinationTimeZone.SecondsFromGMT (sourceDate); int interval = destinationGMTOffset - sourceGMTOffset; var destinationDate = sourceDate.AddSeconds (interval); var dateTime = new DateTime(2001, 1, 1, 0, 0,0).AddSeconds(destinationDate.SecondsSinceReferenceDate); DescriptionLabel.Text = dateTime.ToString ("dd.MM.yyyy. HH:mm"); this.date = destinationDate;
Ce code ajoute une complexité inutile. Si vous souhaitez convertir du temps à votre fuseau horaire local, utilisez simplement DateTime.TolocalTime ().
La date renvoyée de DatePicker est au format UTC. Il existe plusieurs méthodes de conversion de l'UTC en temps local. Comme Ce Réponse State Tolocaltime est le meilleur.
DateTime.SpecifyKind(datePicker.Date, DateTimeKind.Utc).ToLocalTime();
Je pense que c'est la bonne réponse. Dans le code d'origine, l'OP spécifié denttitimekind.local code> au lieu de
denttimekind.utc code>. Étant donné qu'un
nsdate code> représente UTC mais la conversion ne définit pas le
.Kind code>, voici comment vous devez le faire.
Mais DatePicker.date est un nsdate et le premier paramètre de la méthode DateTime.SpecifyKind est une date de données ...
Est-il possible que l'épargne de la lumière du jour soit en vigueur? Cela peut parfois causer des différences d'heures similaires à ce que vous semblez ressentir.