2016-04-19 3 views
1

Voici mon code:de Parsing DateTime avec fuseau horaire

DateTime dateTime; 
string str = "2016-02-11 23:02:30 -0500"; 
if (!DateTime.TryParse(str, out dateTime)) 
{ 

} 

Je reçois {2/12/2016 7:02:30 AM} comme résultat dateTime. Mais je veux obtenir 2/11/2016, est-ce possible?

+0

Essayez 'DateTime.ParseExact' – MusicLovingIndianGirl

+0

Vous voulez changer la façon dont regarder dans votre IDE DateTime? Ou vous voulez changer comment il est affiché à l'utilisateur? Pour le premier: Il vient du système; Vous pouvez modifier le paramètre de date et heure de votre système. Pour le second, essayez de mettre en forme la date et l'heure au format désiré. – raidensan

Répondre

1

Je pense que vous cherchez TimeZoneInfo:

DateTime dateTime; 
string str = "2016-02-11 23:02:30 -0500"; 
if (!DateTime.TryParse(str, out dateTime)) 
{ 
    // error 
} 

dateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified); 

var serverTimeZone = TimeZoneInfo.Local; // Server time zone 
var allTimeZones = TimeZoneInfo.GetSystemTimeZones(); // Time zone list 

var clientTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time"); 

// DateTime in server time zone 
var dateTimeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, clientTimeZone.Id, serverTimeZone.Id); 

Jetez un oeil à ce violon: https://dotnetfiddle.net/Apx51v

Note:

Et rappelez-vous, DateTime ne contient pas de temps zone information.

« Un développeur est responsable de garder la trace de l'information en temps zone associée à une valeur DateTime via un mécanisme externe » DateTime in .NET

0

Vous devez utiliser DateTimeOffset.Parse() pour analyser la chaîne en DateTimeOffset objet avec représentés offset et que le format à chaîne sans elle (« yyyy-mM-jJ HH: mm: ss » dans l'exemple)

0

Étant donné que votre chaîne a UTC Offset valeur, je l'analyser à DateTimeOffset au lieu de DateTime.

DateTimeOffset dto; 
string str = "2016-02-11 23:02:30 -0500"; 
if (DateTimeOffset.TryParse(str, CultureInfo.InvariantCulture, DateTimeStyles.None, out dto)) 
{ 
    //Success 
} 

Maintenant vous avez une DateTimeOffset comme {11.02.2016 23:02:30 -05:00} et vous pouvez l'utiliser est .DateTime property qui retourne 11.02.2016 23:02:30.

enter image description here