用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。。。除非你建议对所有时区标识符进行类似的替换,否则这并不是一种通用的方法。