用C#表示日期时间的字符串?

用C#表示日期时间的字符串?,c#,string-to-datetime,C#,String To Datetime,如何将以下日期字符串转换为日期时间: Fri, 18 Dec 2009 9:38 am PST 我尝试了DateTime.Parse(字符串) 我得到了以下错误: The string was not recognized as a valid DateTime. There is an unknown word starting at index 25. System.SystemException {System.FormatException} 更新 我试着从雅虎那里得到天气,我试着这

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

Fri, 18 Dec 2009 9:38 am PST
我尝试了
DateTime.Parse(字符串)

我得到了以下错误:

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),
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);
    }
}
我调试了它。日期属性正确(如上所述)

谢谢。

如果无法自动计算,您可以在指定所用格式的位置使用

在您的情况下,您需要自己更换“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);
如果你的程序需要使用不同的时区缩写,你必须构建一个带有缩写到时区偏移量转换的
字典。

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

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

Date = DateTime.Parse(feed.Element(yWeatherNS + "condition").Attribute("date").Value),
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);
    }
}

请注意,这假定了固定的日期/时间格式和区域性。您的需求可能会有所不同,您也应该考虑使用<代码> TyPARSE 或<代码> TyPARSETACTION<代码>,如果这是用户输入。除了
zzz
不识别时区缩写外,据我所知,只有UTC偏移量。最好使用
DateTimeOffset
而不是
DateTime
,因为这样可以保留时区信息。@JonSkeet:idd,很快就知道了;)@神秘性:否,
DateTimeOffset
保留与UTC的偏移量。这和时区不一样。(.NET没有任何类型来表示“特定时区中的日期和时间”)@wouther:PST实际上是UTC-8,而不是UTC-7。。。除非你建议对所有时区标识符进行类似的替换,否则这并不是一种通用的方法。