2013-11-13 4 views
2

я получаю от веб-службы на дату, которая записывается так:Преобразовать написаны даты в C# .NET

"Tuesday, November 12, 2013 8:18:14 AM PST" 
or 
"Tuesday, November 12, 2013 10:36:03 AM PST" 
or 
"Wednesday, November 13, 2013 5:15:58 AM PST" 
... 

Эта дата хранится внутри массива, и я хотел бы, чтобы отсортировать его. Но это не работает должным образом. Поэтому я хотел бы сохранить эту письменную дату в формате DateTime или другом формате, поддерживаемом языком. Чем он сортируется снова. Мне также было бы легче получить только дни и часы из DateTime, чем использовать strstr или что-то в этом роде.

Возможно ли (и как) преобразовать эту письменную дату в DateTime, пожалуйста?

PS: Я уже пробовал использовать Convert.DateTime("Wednesday, November 13, 2013 5:15:58 AM PST"). Но это не сработало.

Благодаря

+0

_ «Но это не сработало» _ - вы пытались вставить исключение в поле поиска? – CodeCaster

+0

Является ли веб-сервис гарантированным * всегда * возвращать стандартное время Pacific? И нужно ли его преобразовать для сравнения с локальными DateTimes? – nmclean

ответ

3

Вам нужно разобрать его с форматом "dddd, MMMM d, yyyy h:m:ss tt 'PST'"

string str = "Wednesday, November 13, 2013 5:15:58 AM PST"; 

DateTime dt = DateTime.ParseExact(str, 
           "dddd, MMMM d, yyyy h:m:ss tt 'PST'", 
           CultureInfo.InvariantCulture); 

Я использовал одного d, h и m, за день, час, и месяц, так как они будут принимать как единый цифр и двух цифр.

+0

'dt.Kind'' Unspecified'. Это может быть проблемой, если вы попытаетесь преобразовать ее в «Local» или «Utc». –

+0

он работает! танков :) – wytes

1

Becuase Convert.DateTime использует текущую информацию культуры.

Значение аргумент должен содержать представление даты и времени в одном из форматов, описанных в DateTimeFormatInfo темы.

Вы можете использовать метод DateTime.ParseExact с пользовательским форматом даты и времени.

string s = "Wednesday, November 13, 2013 5:15:58 AM PST"; 
DateTime dt = DateTime.ParseExact(s, 
            "dddd, MMMM d, yyyy h:mm:ss tt 'PST'", 
            CultureInfo.InvariantCulture); 
Console.WriteLine(dt); 

Выход будет;

11/13/2013 5:15:58 AM 

Здесь в demonstration.

Для получения дополнительной информации ознакомьтесь с;

+1

Есть ли у вас шаблон ответа на эту дату для меня? ;-) – CodeCaster

+1

@CodeCaster Вы, сэр, сделали мой день ':)'. Мне жаль, что у меня не было такого шаблона. Но серьезно, 'DateTime' и особенно _parsing_' DateTime' является одной из самых мощных сторон моей в C#. Хотелось бы, чтобы я знал темы _generics_, _LINQ_, _Reflection_, _Regex_, как я знал как «DateTime» и разбор материала ':)' –

0

Если дата всегда будет заканчиваться буквой 3 часовых поясов аббревиатурой следующее будет работать:

string str = "Wednesday, November 13, 2013 5:15:58 AM PST"; 
DateTime date = DateTime.Parse(str.Substring(0, str.Length - 4)); 
Смежные вопросы