3

如何将以下日期字符串转换为 dateTime:

Fri, 18 Dec 2009 9:38 am PST

我试过了DateTime.Parse(string)

我收到以下错误:

The string was not recognized as a valid DateTime. There is an unknown word starting at index 25. System.SystemException {System.FormatException}

更新

我试图从雅虎获得天气,我试图得到这样的日期:

Date = DateTime.Parse(feed.Element(yWeatherNS + "condition").Attribute("date").Value),

我调试了它。date 属性是正确的(如上)。

谢谢。

4

2 回答 2

7

认为BCL 中没有任何内容可以解析时区缩写。(无论如何,应尽可能避免使用它们,因为它们可能会模棱两可。)

如果您不介意丢失时区信息,可以使用以下内容:

using System;
using System.Globalization;

static class Test
{
    static void Main()
    {
        string text = "Fri, 18 Dec 2009 9:38 am PST";
        DateTime parsed = TrimZoneAndParse(text);
        Console.WriteLine(parsed);
    }

    static DateTime TrimZoneAndParse(string text)
    {
        int lastSpace = text.LastIndexOf(' ');
        if (lastSpace != -1)
        {
            text = text.Substring(0, lastSpace);
        }
        return DateTime.ParseExact(text,
            "ddd, dd MMM yyyy h:mm tt",
            CultureInfo.InvariantCulture);
    }
}

请注意,这假定了固定的日期/时间格式和文化。您的需求可能会有所不同,您还应该考虑使用TryParseorTryParseExact如果这是用户输入。

于 2012-10-19T06:36:06.847 回答
5

如果DateTime.Parse无法自动计算出来,您可以使用DateTime.ParseExact您指定所使用格式的位置。

在您的情况下,这类似于,您需要自己替换“PST”:

CultureInfo provider = CultureInfo.InvariantCulture;
string dateString = "Fri, 18 Dec 2009 9:38 am PST";
dateString = dateString.Replace("PST", "-08:00");
string format = "ddd, dd MMM yyyy h:mm tt zzz";
DateTime result = DateTime.ParseExact(dateString, format, provider);

如果您的程序需要使用不同的时区缩写,您必须构建一个Dictionary带有缩写的时区偏移转换。

于 2012-10-19T06:34:15.960 回答