如何以这种格式解析DateTime? “太阳5月23日22:00:00 UTC + 0300 2010”

时间:2010-05-23 16:55:30

标签: c# datetime

这是一个快速的,我想解析这种格式的日期“Sun May 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 个答案:

答案 0 :(得分:2)

DateTime dt = DateTime.ParseExact(s,"ddd MMM dd HH:mm:ss UTCzzzz yyyy", System.Globalization.CultureInfo.InvariantCulture);

答案 1 :(得分:2)

它不是标准格式,但你仍然可以解析它。

        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 :(得分:1)

这不是标准的.NET格式,因此您可能需要手动解析它。 UTC+0300位表示时区,其他所有内容都是日期和时间的一部分。

答案 3 :(得分:1)

我尝试了@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);
}

答案 4 :(得分:0)

对不起我之前的回答非常简单。 用你的日期格式用MMM替换MM,应该没问题。

答案 5 :(得分:0)

从给出的示例中,无法判断月份是以3字母形式(1月,2月,5月等)还是以完整形式(1月,2月,5月等)。< / p>

如果它应该是简短形式,请使用:

ddd MMM dd HHmmss UTC zzz yyyy

如果它应该是长形式,请使用:

ddd MMMM dd HHmmss UTC zzz yyyy

可在http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

找到可用格式说明符的详细信息