解析日期时间时出错
本文关键字:出错 时间 日期 | 更新日期: 2023-09-27 18:11:19
我在c#程序的语句中得到以下错误消息:
dr["StartDate"] = Convert.ToDateTime(dr["business_dt"]).ToString("MM/dd/yyyy");
我在美国的机器上没有得到这个错误。但它会在用户位于美国以外的机器上抛出一个错误。从datareader返回的日期格式为:08/31/2010 12:00:00 AM
系统。FormatException:字符串没有被识别为有效的日期时间。在System.DateTimeParse。解析(字符串s, DateTimeFormatInfo)DateTimeStyles样式)。ToDateTime(字符串值,IFormatProvider(提供)System.String.System.IConvertible。ToDateTime (IFormatProvider提供者)在System.Convert。ToDateTime(对象值)
请建议。
谢谢。
Edit:
use DateTime.ParseExact
method:
var dateString = dr["business_dt"].ToString();
var format = "MM/dd/yyyy hh:mm:ss tt";
var dateTime = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
dr["StartDate"] = dateTime;
问题是,在一些国家,日期的月和日部分是颠倒的。在美国是"MM/dd/yyyy",在德国是"dd/MM/yyyy"。
所以你必须指定你的字符串的格式(在你的例子中,它看起来像是美国格式,所以我选择了这个文化):
DateTime date = Convert.ToDateTime(dr["business_dt"], new CultureInfo("en-US"));
dr["StartDate"] = date.ToString("MM/dd/yyyy");
发生这种情况是因为机器的默认区域性表示日期格式为"dd/MM/yyyy",而在您的情况下,月份输入为"31",这是不正确的,这就是它抛出错误的原因。
请在解析日期时间之前设置区域性。
在你的代码之前使用这段代码:
CultureInfo CultureInfo1 = (CultureInfo)CultureInfo.CurrentCulture.Clone();
CultureInfo1.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
Thread.CurrentThread.CurrentCulture = CultureInfo1;
如果有帮助请告诉我
我在ASP.NET中遇到了一个相关的问题。问题发生在一个网站上的web服务器上运行两个(几乎相同的)代码副本。让我去了一段时间,因为似乎没有任何逻辑符合这些症状。这原来是Web.Config的问题。失败站点缺失:
<globalization uiCulture="en" culture="en-AU" /> from the <system.web> section.
我想我只是提一下,以防它对任何人都有帮助。