2014-05-22 78 views
2

当我尝试从文本框中获取日期值时,该值为:"05/22/2014" 我想将其插入到具有日期时间格式的数据库字段中,因此我想先将其转换。所以我对文本框的text属性的值使用了Convert.ToDateTime函数。但我收到错误说FormatException被用户代码未处理datetime

FormatException未被用户代码处理。字符串不是 被识别为有效的DateTime。

当我在文本框文本值上使用Convert.ToDateTime时,我不是在做什么?

<asp:TextBox ID="cldStartProj" CssClass="datePicker" TextMode="DateTime" runat="server"></asp:TextBox> 
DateTime dtDateStart = Convert.ToDateTime(cldStartProj.Text); 
+0

什么是您的CurrentCulture? –

+0

你希望用户使用什么格式?他们会一直使用相同的格式吗?你在强制执行吗? –

+0

嗨,Soner,我不知道这个问题的答案,我怎么会发现这个问题呢? – Marcus72

回答

0

你应该使用:

DateTime.ParseExact("05/22/2014", 
        <your expected format>, 
        Cultureinfo.InvariantCulture); 
+0

嗨@Neel,你能给我一个例子,说明我会如何写出你期望的格式的参数?它会是“yyyy-mm-dd”吗? – Marcus72

+0

它可以是你的愿望它可能是“MM/dd/yyyy”永远记得MM必须是upercase – Neel

+0

小心'/'格式说明符。它在自定义日期和时间格式中有特殊含义。我在我的回答中解释了它。 –

1

Convert.ToDateTime(string)默认使用CurrentCulture。这里怎么样implemented;

public static DateTime ToDateTime(String value) 
{ 
    if (value == null) 
     return new DateTime(0); 
    return DateTime.Parse(value, CultureInfo.CurrentCulture); 
} 

也许,你CurrentCulture没有MM/dd/yyyy格式为非标准的日期和时间。这就是为什么你的Convert.ToDateTime会失败。您可以使用GetAllDateTimePatterns方法查看所有标准日期和时间模式。

这里的一个例子LINQPad;

CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns().Dump(); 

您可以使用DateTime.TryParseExactDateTime.ParseExact方法解析您的自定义日期和时间字符串。

string s = "05/22/2014"; 
DateTime dt; 
if(DateTime.TryParseExact(s, "MM/dd/yyyy", CultureInfo.CurrentCulture, 
          DateTimeStyles.None, out dt)) 
{ 
    // parsing successful 
} 
else 
{ 
    // not successful 
} 

但reme​​mer,/ Custom Format Specifier在自定义日期和格式字符串特殊的意义。这意味着像取代我与当前的文化日期分隔符。这意味着即使您的字符串格式完全相同,如果您的DateSeparator property不是/,您的解析操作也会失败。

财产是 'EN-CA'

正如我所说的,你的文化没有一个非标准格式MM/dd/yyyy。这里有您的en-ca文化支持的标准格式的完整列表;

foreach(var format in CultureInfo.GetCultureInfo("en-ca").DateTimeFormat.GetAllDateTimePatterns()) 
{ 
    Console.WriteLine(format); 
} 

输出将;

dd/MM/yyyy 
dd/MM/yy 
d/M/yy 
yyyy-MM-dd 
yy-MM-dd 
M/dd/yy 
dd-MMM-yy 
dd-MMM-yyyy 
MMMM-dd-yy 
MMMM d, yyyy 
d-MMM-yy 
dddd, MMMM dd, yyyy 
MMMM-dd-yy h:mm tt 
MMMM-dd-yy hh:mm tt 
MMMM-dd-yy HH:mm 
MMMM-dd-yy H:mm 
MMMM d, yyyy h:mm tt 
MMMM d, yyyy hh:mm tt 
MMMM d, yyyy HH:mm 
MMMM d, yyyy H:mm 
d-MMM-yy h:mm tt 
d-MMM-yy hh:mm tt 
d-MMM-yy HH:mm 
d-MMM-yy H:mm 
dddd, MMMM dd, yyyy h:mm tt 
dddd, MMMM dd, yyyy hh:mm tt 
dddd, MMMM dd, yyyy HH:mm 
dddd, MMMM dd, yyyy H:mm 
MMMM-dd-yy h:mm:ss tt 
MMMM-dd-yy hh:mm:ss tt 
MMMM-dd-yy HH:mm:ss 
MMMM-dd-yy H:mm:ss 
MMMM d, yyyy h:mm:ss tt 
MMMM d, yyyy hh:mm:ss tt 
MMMM d, yyyy HH:mm:ss 
MMMM d, yyyy H:mm:ss 
d-MMM-yy h:mm:ss tt 
d-MMM-yy hh:mm:ss tt 
d-MMM-yy HH:mm:ss 
d-MMM-yy H:mm:ss 
dddd, MMMM dd, yyyy h:mm:ss tt 
dddd, MMMM dd, yyyy hh:mm:ss tt 
dddd, MMMM dd, yyyy HH:mm:ss 
dddd, MMMM dd, yyyy H:mm:ss 
dd/MM/yyyy h:mm tt 
dd/MM/yyyy hh:mm tt 
dd/MM/yyyy HH:mm 
dd/MM/yyyy H:mm 
dd/MM/yy h:mm tt 
dd/MM/yy hh:mm tt 
dd/MM/yy HH:mm 
dd/MM/yy H:mm 
d/M/yy h:mm tt 
d/M/yy hh:mm tt 
d/M/yy HH:mm 
d/M/yy H:mm 
yyyy-MM-dd h:mm tt 
yyyy-MM-dd hh:mm tt 
yyyy-MM-dd HH:mm 
yyyy-MM-dd H:mm 
yy-MM-dd h:mm tt 
yy-MM-dd hh:mm tt 
yy-MM-dd HH:mm 
yy-MM-dd H:mm 
M/dd/yy h:mm tt 
M/dd/yy hh:mm tt 
M/dd/yy HH:mm 
M/dd/yy H:mm 
dd-MMM-yy h:mm tt 
dd-MMM-yy hh:mm tt 
dd-MMM-yy HH:mm 
dd-MMM-yy H:mm 
dd-MMM-yyyy h:mm tt 
dd-MMM-yyyy hh:mm tt 
dd-MMM-yyyy HH:mm 
dd-MMM-yyyy H:mm 
dd/MM/yyyy h:mm:ss tt 
dd/MM/yyyy hh:mm:ss tt 
dd/MM/yyyy HH:mm:ss 
dd/MM/yyyy H:mm:ss 
dd/MM/yy h:mm:ss tt 
dd/MM/yy hh:mm:ss tt 
dd/MM/yy HH:mm:ss 
dd/MM/yy H:mm:ss 
d/M/yy h:mm:ss tt 
d/M/yy hh:mm:ss tt 
d/M/yy HH:mm:ss 
d/M/yy H:mm:ss 
yyyy-MM-dd h:mm:ss tt 
yyyy-MM-dd hh:mm:ss tt 
yyyy-MM-dd HH:mm:ss 
yyyy-MM-dd H:mm:ss 
yy-MM-dd h:mm:ss tt 
yy-MM-dd hh:mm:ss tt 
yy-MM-dd HH:mm:ss 
yy-MM-dd H:mm:ss 
M/dd/yy h:mm:ss tt 
M/dd/yy hh:mm:ss tt 
M/dd/yy HH:mm:ss 
M/dd/yy H:mm:ss 
dd-MMM-yy h:mm:ss tt 
dd-MMM-yy hh:mm:ss tt 
dd-MMM-yy HH:mm:ss 
dd-MMM-yy H:mm:ss 
dd-MMM-yyyy h:mm:ss tt 
dd-MMM-yyyy hh:mm:ss tt 
dd-MMM-yyyy HH:mm:ss 
dd-MMM-yyyy H:mm:ss 
MMMM dd 
MMMM dd 
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK 
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK 
ddd, dd MMM yyyy HH':'mm':'ss 'GMT' 
ddd, dd MMM yyyy HH':'mm':'ss 'GMT' 
yyyy'-'MM'-'dd'T'HH':'mm':'ss 
h:mm tt 
hh:mm tt 
HH:mm 
H:mm 
h:mm:ss tt 
hh:mm:ss tt 
HH:mm:ss 
H:mm:ss 
yyyy'-'MM'-'dd HH':'mm':'ss'Z' 
MMMM-dd-yy h:mm:ss tt 
MMMM-dd-yy hh:mm:ss tt 
MMMM-dd-yy HH:mm:ss 
MMMM-dd-yy H:mm:ss 
MMMM d, yyyy h:mm:ss tt 
MMMM d, yyyy hh:mm:ss tt 
MMMM d, yyyy HH:mm:ss 
MMMM d, yyyy H:mm:ss 
d-MMM-yy h:mm:ss tt 
d-MMM-yy hh:mm:ss tt 
d-MMM-yy HH:mm:ss 
d-MMM-yy H:mm:ss 
dddd, MMMM dd, yyyy h:mm:ss tt 
dddd, MMMM dd, yyyy hh:mm:ss tt 
dddd, MMMM dd, yyyy HH:mm:ss 
dddd, MMMM dd, yyyy H:mm:ss 
MMMM, yyyy 
MMMM, yyyy 
-1

这是最适合我的代码,谢谢大家的回复。

private String FormatDate(String _Date) 
     { 
      DateTime Dt = DateTime.Now; 
      IFormatProvider mFomatter = new System.Globalization.CultureInfo("en-US"); 
      Dt = DateTime.Parse(_Date, mFomatter); 
      return Dt.ToString("yyyy-MM-dd"); 
     } 
+0

虽然这有效,但它不是最好的方法。请尝试实现其他答案,您的代码将更加清洁,并且您将更好地理解如何将字符串解析为DateTime并将其格式化为字符串。 – mason

+0

好的,谢谢梅森的建议,我尝试了其他解决方案,但不断出现错误,可能是由于我实施它们的方式,我会回去重试。 – Marcus72

+0

这可能会像你说的那样工作,但这不是一个好方法。例如,如果OP具有'CultureInfo(“en-US”)'不具有的格式,那么'DateTime.Parse'将引发异常。 –

相关问题