2012-11-06 3 views
0

Quelle est la meilleure façon de convertir une chaîne telle que:chaîne date Parse .net

Mon Nov 05 2012 21:27:58 GMT+0000 (GMT Standard Time) 

dans un DateTime .NET? Je veux conserver autant de date que possible, par exemple le TimeZone.

J'essaie cela, mais il perd le GMT:

DateTime.ParseExact(date.Substring(0, 24), 
          "ddd MMM d yyyy HH:mm:ss", 
          CultureInfo.InvariantCulture); 
+0

On dirait que vous avez besoin d'un mélange de 'DateTimeOffset' (qui conserve le le décalage, mais pas le fuseau horaire) et une chaîne qui représente le fuseau horaire. Selon le format de la chaîne, vous pouvez également analyser le fuseau horaire. – CodesInChaos

+0

Dupe de [datetime.parse et le faisant fonctionner avec un format spécifique] (http://stackoverflow.com/questions/341175/datetime-parse-and-making-it-work-with-a-specific-format)? – lstern

+0

@lstern Comment est-ce une dupe? Le problème ici n'est pas seulement l'analyse du temps, mais aussi le décalage et le fuseau horaire. – CodesInChaos

Répondre

3

Ce n'est pas très robuste, mais il fonctionne pour votre exemple:

DateTimeOffset.ParseExact(date.Substring(0, 33) // remove time zone 
           .Remove(25,3)  // remove "GMT" before offset 
           ,"ddd MMM dd yyyy HH:mm:ss zzz" 
           ,System.Globalization.CultureInfo.InvariantCulture); 
+1

Vous aurez besoin 'DateTimeOffset' au lieu de' DateTime' pour conserver le décalage. Et bien sûr, vous devez stocker le fuseau horaire séparément. – CodesInChaos

-1

moyen facile de diviser la chaîne et le convertir dans datetime en utilisant certains formats. mais que se passe-t-il si d'autres formats viennent à vous.

essayez celui-ci.

http://www.codeproject.com/Articles/33298/C-Date-Time-Parser

échantillon

string str = @"Your program recognizes string : 21 Jun 2010 04:20:19 -0430 blah blah."; 
DateTimeRoutines.ParsedDateTime pdt; 
if(str.TryParseDateTime(DateTimeRoutines.DateTimeFormat.USA_DATE, out pdt) && pdt.IsUtcOffsetFound) 
Console.WriteLine("UTC date&time was found: " + pdt.UtcDateTime.ToString());