2012-04-24 4 views
7

Я хочу отформатировать строку: «2012-04-20 10: 10: 00 + 0200» до даты с этим форматом. , поэтому я думаю, что это должно быть «yyyy-MM-dd hh: mm: ss zzz»?C# string to DateTime с часовым поясом

когда я попробовал этот

// starttime = {20/04/2012 10:10:00} without my +0200! 
DateTime starttime = Convert.ToDateTime("2012-04-20 10:10:00+0200",CultureInfo.CurrentCulture); 
// And this gave me a format exception : {System.FormatException: String was not recognized as a valid DateTime. 
     DateTime result = DateTime.ParseExact("2012-04-20 10:10:00+0200", "yyyy-MM-dd hh:mm:ss zzz", CultureInfo.InvariantCulture); 

РЕШЕНИЕ Предоставлено "V4Vendetta":

Вы должны попробовать использовать DateTimeOffset вместо DateTime

DateTimeOffset result = DateTimeOffset.Parse("2012-04-20 10:10:00+0200",CultureInfo.InvariantCulture); 

Здесь вы получите Offset (2 часа), который может быть вычислен с использованием значения DateTime (10:10) и получить желаемый результат (результат result.DateTime + result.Offset)

+1

Посмотрите здесь: [link] (http://stackoverflow.com/questions/8754563/parse-string- datetime-contains-timezone-info) – Willem

+1

По моим сведениям, ваш ввод должен быть «2012-04-20 10: 10: 00 + 02: 00» – Ramesh

+0

@Schaliasos beter? :) – user1264255

ответ

22

вы должны попробовать использовать DateTimeOffset вместо DateTime

DateTimeOffset result = DateTimeOffset.Parse("2012-04-20 10:10:00+0200",CultureInfo.InvariantCulture); 

Здесь вы получите Offset (2 часа), которые тоже могут быть вычислены с вашей DateTime (10:10) и получите желаемый результат (результат.DateTime + result.Offset)

+0

Спасибо! я бы проголосовал, но я пока не могу – user1264255

+0

Рад! вы должны попытаться отметить ответы на все ваши вопросы *, которые помогли вам * и поощрить других. – V4Vendetta

+0

Такая полезная вещь! – Keerigan

1

В статье MSDN here, похоже, есть именно то, что вы ищете. За указанной статье, вы должны использовать {0:MM/dd/yy H:mm:ss zzz}

1

использование "2012-04-20 10:10:00 +02: 00" вместо " "2012-04-20 10: 10: 00 + 0200"

+0

, тогда я получил то же самое, когда я просто конвертировал в datetime , результат: // starttime = {20/04/2012 10:10:00} без моего +0200 – user1264255

+0

Он должен находиться в часовом поясе +02: 00. Пожалуйста, проверьте toString ("yyyy-MM-dd hh: mm: ss zzz") –

+0

Правильно, но я действительно нуждался в нем в DateTime. V4Vendetta дал мне правильное решение. Но все равно спасибо за вашу помощь :) – user1264255

0

Попробуйте это:

DateTime datetime = DateTime.ParseExact("10/10/2009 12:00:00", "MM/dd/yyyy hh:mm:ss", System.Globalization.CultureInfo.CurrentCulture); 
Смежные вопросы