2017-10-06 1 views
-1

Lorsque j'ai essayé d'analyser la chaîne de date "2017-09-25T11:06:55+00:00" en utilisant la méthode TryParse, je reçois la sortie suivante:Problème avec l'analyse syntaxique datetime

{9/25/2017 7:06:55 AM} 

Ainsi, il est ressemble à 11 heures est de se convertir en 7 heures Je ne sais pas pourquoi Cela arrive-t-il? Est-ce à cause de +00:00?? Que dois-je faire pour que la sortie Datetime analysée soit la même: c'est-à-dire {9/25/2017 11:06:55 AM}? J'ai essayé d'utiliser les paramètres locaux/culture et les styles DateTime actuels. Supposons local mais pas de chance. (Note: Je suis dans le fuseau horaire de l'Est)

Merci.

+2

C'est un horodatage UTC, ce que vous obtenez est probablement votre heure locale. Il est généralement préférable de conserver toutes les dates dans le code et la base de données en UTC et d'utiliser simplement l'heure locale pour l'affichage. – juharr

Répondre

0

Vous utilisez le fuseau horaire UTC (+00: 00), mais apparemment, vous ou votre PC êtes dans le fuseau horaire -04: 00.

0

Si vous pouvez utiliser DateTimeOffset, alors j'ai tendance à le préférer. Les informations de fuseau horaire sont conservées et vous avez accès aux propriétés de date et heure locale et UTC de cet objet.

 var dt = DateTimeOffset.Parse("2017-09-25T11:06:55+00:00"); 
     Console.WriteLine(dt.DateTime);   // 9-25 at 11:06 
     Console.WriteLine(dt.UtcDateTime);  // 9-25 at 11:06 
     Console.WriteLine(dt.LocalDateTime); // 9-25 at 07:06 

Si vous savez que vous allez toujours avoir affaire à UTC, vous pouvez simplement analyser en ajustant à l'universel comme ceci:

 var dt = DateTime.Parse("2017-09-25T11:06:55+00:00", CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal); 
     Console.WriteLine(dt); // 9-25 at 11:06 
+0

Merci Trio.No, ce ne sera pas toujours UTC.So le code suivant sera-t-il correct: DateTimeStyles styles = DateTimeStyles.AssumeLocal; const string utcIdenfitifier = "+00: 00"; si (date.Contient (utcIdenfitifier)) { styles = DateTimeStyles.AdjustToUniversal; } si (DateTime.TryParse (date, CultureInfo.CurrentCulture, styles, hors retVal)) { retour retVal; } – Shirish

+0

De même, vous pouvez utiliser quelque chose comme ceci: var dto = DateTimeOffset.Parse ("2017-09-25T11: 06: 55 + 00: 00"); return dto.Offset == TimeSpan.Zero? dto.UtcDateTime: dto.LocalDateTime; – Trioj

0

Lorsque vous analysez initialement c'est la valeur correcte, il est juste maintenant ajusté pour être dans votre fuseau horaire. Vous pouvez le forcer avec ToUniversalTime:

DateTime.Parse("2017-09-25T11:06:55+00:00").ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss tt") 

sortie

"2017/09/25 11:06:55 AM" 
0

Vous voulez analyser correctement UTC DateTime et d'avoir 25/09/2017 11:06:55 au lieu de 25/09/2017 07:06:55 +00: 00 n'est pas correct au format UTC, vous devez le changer en "2017-09-25T11: 06: 55z".

Here is working example