2010-04-05 12 views

Odpowiedz

11

Próbowałeś coś takiego:

string dateString, format; 
DateTime result; 
CultureInfo provider = CultureInfo.InvariantCulture; 

dateString = "Thu, 21 Jan 2010 17:47:00 EST"; 
format = "ddd, dd MMM yyyy hh:mm:ss EST"; 

result = DateTime.ParseExact(dateString, format, provider); 
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); 

Nie testowałem go jeszcze (będzie w ciągu kilku chwil) ... ale wierzę, że zrobi to za ciebie.

Edycja: Wydaje się, że problem polega na tym, że RFC1123 stwierdza, że ​​strefa czasowa powinna zawsze być GMT ... i dlatego r lub R nie działał jako format dla ciebie. Problem polega na EST. Powyższy wzorzec dotyczy EST, ale jest statyczny, więc jeśli masz inną strefę czasową, możesz mieć kłopoty. Najlepszym wyjściem byłoby pójście ze standardem RFC1123 i przejście do GMT, które powinno rozwiązać twój problem. Jeśli nie możesz, daj mi znać, że mogę mieć rozwiązanie.

Edycja 2: To nie jest kompletne rozwiązanie, ale to, co robi, izoluje strefę czasową i nadal pozwala je przeanalizować. Kod nie zna strefy czasowej, w której jest prezentowany, ale możesz rzucić na nią skrót strefy czasowej i przeanalizuje czas. Jeśli chcesz przekonwertować na GMT, a następnie użyć r lub R, możesz wziąć wynik meczu regex, umieścić go na tabeli odnośników (aby sprawdzić, jaki czas jest przesunięty względem tego skrótu strefy czasowej), a następnie przekonwertować czas na GMT i spróbuj stamtąd. To byłoby dobre rozwiązanie, ale trochę więcej pracy. Oto kod:

string dateString, format, pattern, tz; 
DateTime result; 
CultureInfo provider = CultureInfo.InvariantCulture; 
pattern = @"[a-zA-Z]+, [0-9]+ [a-zA-Z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+ (?<timezone>[a-zA-Z]+)"; 
dateString = "Thu, 21 Jan 2010 17:47:00 EST"; 

Regex findTz = new Regex(pattern, RegexOptions.Compiled); 

tz = findTz.Match(dateString).Result("${timezone}"); 

format = "ddd, dd MMM yyyy HH:mm:ss " + tz; 

try 
{ 
    result = DateTime.ParseExact(dateString, format, provider); 
    Console.WriteLine("Timezone format is: {0}", format); 
    Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); 
} 
catch (FormatException) 
{ 
    Console.WriteLine("{0} is not in the correct format.", dateString); 
} 

    Console.ReadLine(); 

Oto lista UTC offsetu dla Ciebie, jeśli chcesz, aby przekształcić to konwerter Strefa czasowa:

Timezone Abbreviations with UTC offsets

+0

To ma sens. Problem polega jednak na tym, że nie mam wpływu na format daty, ponieważ pochodzi on ze źródła zewnętrznego. Jakieś sposoby konwersji strefy czasowej innej niż GMT na opartą na GMT, a następnie zastosowanie "r" lub "R"? – Moon

+0

Żałuję, że nie miałem lepszej odpowiedzi, to co ci powiem, ale ... skróty nie są rozpoznawane., Mam rozwiązanie, ale to nie jest zabawne ani eleganckie. Wrzucę to i przekreślam palce, że ktoś inny może ci pomóc lepiej ode mnie! Tak mi przykro. –

+0

To nie jest idealne, ale znacznie lepsze! :) Doceniam twoją pomoc, naprawdę robię :) – Moon