C# 将从internet提取的字符串转换为日期时间
我正在制作一个程序,在互联网上搜索,并用我搜索的所有信息填充课堂。我有一个DateTime属性,需要从我拉入的字符串填充该属性。输入的字符串如下所示:美国东部时间9:53a 08/13/18 我已经尝试使用DateTime.ParseExact尝试将此字符串转换为DateTime,使用以下格式字符串:h:mmt ET mm/dd/yy 因此,调用如下所示:var lastTime=DateTime.ParseExactlistValue[0]。InnerText,format,provider 其中InnerText只是我试图转换的文本,Format是我在上面指定的字符串,provider是en US 我在尝试执行此行时遇到以下异常:字符串未被识别为有效的日期时间 如何格式化此字符串以将其正确转换为日期时间?调用C# 将从internet提取的字符串转换为日期时间,c#,datetime,parsing,C#,Datetime,Parsing,我正在制作一个程序,在互联网上搜索,并用我搜索的所有信息填充课堂。我有一个DateTime属性,需要从我拉入的字符串填充该属性。输入的字符串如下所示:美国东部时间9:53a 08/13/18 我已经尝试使用DateTime.ParseExact尝试将此字符串转换为DateTime,使用以下格式字符串:h:mmt ET mm/dd/yy 因此,调用如下所示:var lastTime=DateTime.ParseExactlistValue[0]。InnerText,format,provider
DateTime.ParseExact("9:53a ET 08/13/18".ToUpper(), "h:mmt ET MM/dd/yy", null)
返回正确解析的日期。a不能被识别为AM/PM标识符,因为它是小写的,因此是toUpper,而mm/dd/yy应该是mm/dd/yy,因为mm小写是分钟 呼叫
DateTime.ParseExact("9:53a ET 08/13/18".ToUpper(), "h:mmt ET MM/dd/yy", null)
返回正确解析的日期。a不能被识别为AM/PM标识符,因为它是小写的,因此是toUpper,而mm/dd/yy应该是mm/dd/yy,因为mm小写是分钟 你有几个问题。首先,正如@ChrisCudmore所指出的,您需要在月份中使用MM,而不是MM。其次,DateTime.Parse希望AM/PM指示符是大写的,所以您需要将其大写。以下是一个例子:
string strDate = "9:53a ET 08/13/18";
DateTime dt = DateTime.ParseExact(strDate.ToUpper(), "h:mmt ET MM/dd/yy", System.Globalization.CultureInfo.CurrentCulture);
这应该适用于您提供的示例字符串date 你有几个问题。首先,正如@ChrisCudmore所指出的,您需要在月份中使用MM,而不是MM。其次,DateTime.Parse希望AM/PM指示符是大写的,所以您需要将其大写。以下是一个例子:
string strDate = "9:53a ET 08/13/18";
DateTime dt = DateTime.ParseExact(strDate.ToUpper(), "h:mmt ET MM/dd/yy", System.Globalization.CultureInfo.CurrentCulture);
这应该适用于您提供的示例字符串date 在这里,让你感到困惑的是a和p的名称。日期-时间格式不支持这一点。请参见编辑我不知道这是否是性能最好的解决方案,但您可以使用TryParseExact来说明a和p。我制作了一个静态方法来解决您的问题:
public static DateTime? CustomParse(string dateString)
{
DateTime date;
//Hard code the 'a' in the parse string
if(DateTime.TryParseExact(dateString, "h:mma ET MM/dd/yy", new CultureInfo("en-US"), DateTimeStyles.None, out date))
{
return date;
}
//'a' wasnt in the right position, try the 'p'
else if(DateTime.TryParseExact(dateString, "h:mmp ET MM/dd/yy", new CultureInfo("en-US"), DateTimeStyles.None, out date))
{
//Adding 12 hours to make it "PM" to the DateTime object
date = date.AddHours(12);
return date;
}
// Could not parse, return null
return null;
}
另外,记住用MM代替MM,MM是分钟而不是月
我拉了把小提琴
EDIT看到了其他答案,我觉得a和p都不被识别。骗局是天才,别用我的 在这里,让你感到困惑的是a和p的名称。日期-时间格式不支持这一点。请参见编辑我不知道这是否是性能最好的解决方案,但您可以使用TryParseExact来说明a和p。我制作了一个静态方法来解决您的问题:
public static DateTime? CustomParse(string dateString)
{
DateTime date;
//Hard code the 'a' in the parse string
if(DateTime.TryParseExact(dateString, "h:mma ET MM/dd/yy", new CultureInfo("en-US"), DateTimeStyles.None, out date))
{
return date;
}
//'a' wasnt in the right position, try the 'p'
else if(DateTime.TryParseExact(dateString, "h:mmp ET MM/dd/yy", new CultureInfo("en-US"), DateTimeStyles.None, out date))
{
//Adding 12 hours to make it "PM" to the DateTime object
date = date.AddHours(12);
return date;
}
// Could not parse, return null
return null;
}
另外,记住用MM代替MM,MM是分钟而不是月
我拉了把小提琴
EDIT看到了其他答案,我觉得a和p都不被识别。骗局是天才,别用我的 嗯是分钟。试试看,嗯,是几分钟。试试看,MMToUpper工作正常。甚至没有意识到AM/PM名称是大写而不是小写。谢谢。请使用System.Globalization.CultureInfo.InvariantCulture,否则如果您在用户系统中未使用英语区域性,它将抛出System.IndexOutOfRangeException。ToUpper工作正常。甚至没有意识到AM/PM名称是大写而不是小写。谢谢。请使用System.Globalization.CultureInfo.InvariantCulture,否则如果您在用户系统中未使用英语区域性,它将抛出System.IndexAutoFrangeException。