Как разобрать DateTime в этом формате? "Солнце 23 мая 22:00:00 UTC + 0300 2010" - PullRequest
1 голос
/ 23 мая 2010

Это быстро, я хочу разобрать дату в следующем формате: «Солнце, 23 мая, 22:00:00 UTC + 0300 2010»
Это действительный UTC DateTime? И как это разобрать? Я пытался:

DateTime newStartTime = DateTime.ParseExact(hdnNewStartTime.Value, "ddd MM dd HH:mm:ss UTC+0300 yyyy", CultureInfo.CurrentCulture);

Однако, это не сработало, любая помощь приветствуется!

Ответы [ 6 ]

2 голосов
/ 23 мая 2010

Это не стандартный формат, но вы все равно можете его проанализировать.

        string format = "ddd mmm dd HH:mm:ss zzzzz yyyy";
        string temp = "Sun May 23 22:00:00 UTC+0300 2010";
        DateTime time = DateTime.ParseExact(temp, format, CultureInfo.InvariantCulture);
2 голосов
/ 23 мая 2010
DateTime dt = DateTime.ParseExact(s,"ddd MMM dd HH:mm:ss UTCzzzz yyyy", System.Globalization.CultureInfo.InvariantCulture);
1 голос
/ 23 мая 2010

Я попробовал решение, представленное @johncatfish, и оно делает то, что я ожидаю. Я бы предположил, что вы действительно хотите сохранить информацию о часовом поясе.

[Test()]
public void TestCaseWorks ()
{
    string format = "ddd MMM dd HH:mm:ss UTCzzzzz yyyy";
    string temp = "Sun May 23 22:00:00 UTC+0300 2010";
    DateTime time = DateTime.ParseExact(temp, format, CultureInfo.InvariantCulture);

    Assert.AreEqual(DayOfWeek.Sunday, time.DayOfWeek);
    Assert.AreEqual(5, time.Month);
    Assert.AreEqual(23, time.Day);
    Assert.AreEqual(0, time.Minute);
    Assert.AreEqual(0, time.Second);
    Assert.AreEqual(2010, time.Year);

    // Below is the only actually useful assert -- making sure the
    // timezone was parsed correctly.

    // In my case, I am GMT-0700, the target time is GMT+0300 so
    // 22 + (-7 - +3) = 12 is the expected answer. It is an exercise
    // for the reader to make a robust test that will work in any
    // timezone ;).

    Assert.AreEqual(12, time.Hour);
}
1 голос
/ 23 мая 2010

Это не стандартный формат .NET, поэтому вам, вероятно, придется анализировать его вручную.Бит UTC+0300 указывает часовой пояс, все остальное является частью даты и времени.

0 голосов
/ 23 мая 2010

Из приведенного примера невозможно определить, должен ли месяц указываться в трехбуквенной форме (январь, февраль, май и т. Д.) Или в полной форме (январь, февраль, май и т. Д.).

Если оно должно быть в краткой форме, используйте:

ддд МММ дд ЧЧ : мм : сс UTC zzz гггг

Если это должно быть в полной форме, используйте:

ддд ММММ дд ЧЧ : мм : сс UTC zzz гггг

Подробную информацию о доступных спецификаторах форматирования можно найти в http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

0 голосов
/ 23 мая 2010

Извините за мой предыдущий ответ, который был довольно упрощенным. Замените ММ на МММ в вашем формате даты, и все должно быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...