我正在尝试使用以下方法将09/01/2015 00:00:00
解析为格式yyyy-MM-ddThh:mm:ssZ
:
DateTime.ParseExact("09/01/2015 00:00:00", "yyyy-MM-ddThh:mm:ssZ", (IFormatProvider)CultureInfo.InvariantCulture);
但我得到了String was not recognized as a valid DateTime
谁能告诉我为什么?我相信09/01/2015 00:00:00
是一种有效的DateTime格式?
答案 0 :(得分:2)
将指定的日期和时间字符串表示形式转换为它 DateTime等效。 字符串表示的格式必须 完全匹配指定的格式或抛出异常。
在你的情况下,他们不是。
我认为您的09
部分是日期编号,您可以使用dd/MM/yyyy HH:mm:ss
格式。
var dt = DateTime.ParseExact("09/01/2015 00:00:00",
"dd/MM/yyyy HH:mm:ss",
CultureInfo.InvariantCulture);
由于CultureInfo
已经 implements IFormatProvider
,您无需明确转换它。
我不明白这一点。所以这意味着我首先必须纠正我的字符串 其次我可以做一个ParseExact()。我以为ParseExact可以 处理给定的字符串......
ParseExact
不是一个可以解析您提供的任何格式化字符串的神奇方法。如果您的字符串和格式根据您使用的文化设置完全匹配,它只能处理 。
答案 1 :(得分:1)
试试这段代码:
var text = "09/01/2015 00:00:00";
var format = "dd/MM/yyyy HH:mm:ss";
var dt = DateTime.ParseExact(text, format, (IFormatProvider)CultureInfo.InvariantCulture);
您会注意到格式必须在结构上与您尝试解析的文本完全匹配 - 因此该方法的ParseExact
名称。
答案 2 :(得分:0)
格式不匹配,您需要将09/01/2015
更改为2015-01-09
或将yyyy-MM-dd
部分更改为dd/MM/yyyy
。
答案 3 :(得分:0)
ParseExact方法不是将任何日期格式转换为另一种日期格式的终极方法,它只是使用提供的格式将给定字符串解析为日期时间。因此,如果您的inout与此格式不匹配,则该方法将抛出该异常。
由于日期时间在内部只是一个数字,因此根本不需要将一种格式转换为另一种格式,因此只要您知道输入格式,就可以从中构建一个与任何格式无关的日期。当您想要将该日期打印到输出时,可能需要。在这种情况下,您将需要一个格式化程序。
答案 4 :(得分:0)
正如大多数人所说,错误来自这样一个事实,即字符串格式的日期与您所说的格式不符。您说的是09/01/2015 00:00:00在格式“yyyy-MM-ddThh:mm:ssZ”,它不是,因此错误。要纠正这个问题,您需要更改字符串所在的格式,或者更有可能更改日期所在的格式。所以将“yyyy-MM-ddThh:mm:ssZ”更改为“dd / MM / yyyy HH:MM:SS,”
从更长远的角度来看,你是如何到达那个日期的?格式是否可能改变(输入但用户)?如果是这样,最好尝试避免抛出错误并使用TryParseExact更好地处理错误。为了充分利用这一点,我通常会输出一个可为空的DateTime,然后检查它是否为null。如果你不这样做,那么如果解析失败,它只会使输出日期时间成为最小值。
这样的事情应该有效:
public DateTime? StringToDate (string dateString, string dateFormat)
{
DateTime? dt;
DateTime.TryParseExact(dateString, dateFormat, null, System.Globalization.DateTimeStyles.None, out dt);
return dt;
}
然后你可以像这样使用它:
DateTime? MyDateTime = StringToDate("09/01/2015 00:00:00", "dd/MM/yyyy HH:mm:ss");
if(MyDateTime != null)
{
//do something
}
答案 5 :(得分:0)
另一种简单的方法......
var dt = Convert.ToDateTime(Convert.ToDateTime("09/01/2015 00:00:00").ToString("yyyy-MM-ddThh:mm:ssZ"))