|
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
|
Traduction
Source
|
Comment : permettre aux utilisateurs de résoudre des heures ambiguës
-
Si l'heure ambiguë est un élément de données entré par l'utilisateur, vous pouvez laisser l'utilisateur résoudre l'ambiguïté. -
Proposez une méthode de mappage à l'heure UTC. Par exemple, vous pouvez supposer qu'une heure ambiguë est toujours exprimée en heure d'hiver du fuseau horaire.
Pour permettre à un utilisateur de résoudre une heure ambiguë
-
Obtenez la date et l'heure entrées par l'utilisateur. -
Appelez la méthode IsAmbiguousTime pour déterminer si l'heure est ambiguë. -
Si l'heure est ambiguë, appelez la méthode GetAmbiguousTimeOffsets pour récupérer un tableau d'objets TimeSpan. Chaque élément du tableau contient un offset UTC auquel l'heure ambiguë peut être mappée. -
Laissez l'utilisateur sélectionner l'offset désiré. -
Calculez la date et l'heure UTC en soustrayant l'offset sélectionné par l'utilisateur de l'heure locale. -
Appelez la méthode static (Shared dans Visual Basic .NET) SpecifyKind pour affecter la valeur DateTimeKind.Utc à la propriété Kind de la valeur de date et d'heure UTC.
private void GetUserDateInput() { // Get date and time from user DateTime inputDate = GetUserDateTime(); DateTime utcDate; // Exit if date has no significant value if (inputDate == DateTime.MinValue) return; if (TimeZoneInfo.Local.IsAmbiguousTime(inputDate)) { Console.WriteLine("The date you've entered is ambiguous."); Console.WriteLine("Please select the correct offset from Universal Coordinated Time:"); TimeSpan[] offsets = TimeZoneInfo.Local.GetAmbiguousTimeOffsets(inputDate); for (int ctr = 0; ctr < offsets.Length; ctr++) { Console.WriteLine("{0}.) {1} hours, {2} minutes", ctr, offsets[ctr].Hours, offsets[ctr].Minutes); } Console.Write("> "); int selection = Convert.ToInt32(Console.ReadLine()); // Convert local time to UTC, and set Kind property to DateTimeKind.Utc utcDate = DateTime.SpecifyKind(inputDate - offsets[selection], DateTimeKind.Utc); Console.WriteLine("{0} local time corresponds to {1} {2}.", inputDate, utcDate, utcDate.Kind.ToString()); } else { utcDate = inputDate.ToUniversalTime(); Console.WriteLine("{0} local time corresponds to {1} {2}.", inputDate, utcDate, utcDate.Kind.ToString()); } } private DateTime GetUserDateTime() { bool exitFlag = false; // flag to exit loop if date is valid string dateString; DateTime inputDate = DateTime.MinValue; Console.Write("Enter a local date and time: "); while (! exitFlag) { dateString = Console.ReadLine(); if (dateString.ToUpper() == "E") exitFlag = true; if (DateTime.TryParse(dateString, out inputDate)) exitFlag = true; else Console.Write("Enter a valid date and time, or enter 'e' to exit: "); } return inputDate; }
-
qu'une référence à System.Core.dll soit ajoutée au projet ; -
que l'espace de noms System soit importé avec l'instruction using (requise en code C#).