我在oracle数据库中有一个日期,我查询。这个日期如下:
5/3/2016 (after I remove the time portion)
我尝试将此日期转换为DateTime
。我正在使用:
ParseExact(String, String, IFormatProvider)
我做错了什么,我无法弄清楚。
我的代码如下所示。请注意,名为" res"的变量具有如上所述的值5/3/2016
try {
while(reader.Read()) {
string res = reader[0].ToString().Substring(0, 8);
mailer.SendSmtpMail4dev("Result: " + res);
mailer.SendSmtpMail4dev("Result: " + DateTime.ParseExact(res, "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture));
}
} catch(Exception e) { ...
答案 0 :(得分:2)
for DateTime.ParseExact
输入字符串的格式和格式字符串应该相同,所以请使用:
DateTime.ParseExact(res, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture);
在您的情况下,提供的日期为5/3/2016
,您指定的格式为"dd-MM-yyyy"
,无法进行此类转换。如果您需要更改格式,则表示您可以执行以下操作:
string res = "5/2/2016";
DateTime givenDate = DateTime.ParseExact(res, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture);
string newFormatedDate = givenDate.ToString("dd-MM-yyyy");
答案 1 :(得分:1)
由于您的res
日期为dd/MM/yyyy
格式,但您尝试强制转换为dd-MM-yyyy
,因此在DateTime.ParseExact()
中您必须提供相同格式的日期时间和格式字符串,正确的代码将是这样的
mailer.SendSmtpMail4dev("Result: " + DateTime.ParseExact(res, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture).ToString("dd-MM-yyyy"));
答案 2 :(得分:1)
使用:
DateTime.ParseExact(res, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture);
有关详细信息,请参阅MSDN article
答案 3 :(得分:1)
使用
DateTime.ParseExact(res, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture).ToString("dd-MM-yyyy")
答案 4 :(得分:0)
如果您有日期,为什么要将其转换为String
// What if server's NLS_* settings are changed? What does 8 stand for?
reader[0].ToString().Substring(0, 8);
再次Parse
?如果reader[0]
是日期,请使用DateTime
:
try {
while(reader.Read()) {
// 0th field is date, then treat it as being date
DateTime date = Convert.ToDateTime(reader[0]);
//TODO: put the right formats here
mailer.SendSmtpMail4dev("Result: " + date.ToString("dd-MM-yyyy"));
mailer.SendSmtpMail4dev("Result: " + date.ToString("dd-MM-yyyy"));
}
}
catch(Exception e) {
...
}
答案 5 :(得分:0)
上面标出了我的问题的解决方案,但我只是想说一些重要的事情,以便其他人可以节省一些时间。一些建议的解决方案,建议做:DateTime.ParseExact(res, "dd/MM/yyyy" ...)
这似乎也在网上的许多其他例子中,所以我不是说它是错的。然而。这对我来说不起作用,我花了一些时间,在我尝试之前:
DateTime.ParseExact(res, "d/M/yyyy" ...)
请注意,在后面的解决方案中,只有一个d和一个M. 但是我的主要问题,就像每个人都指出的那样,可能是我正在使用的:
"dd-MM-yyyy" instead of "dd/MM/yyyy" (which is the same format as the oracle value)
希望这会为你节省一些时间