将隐藏字段值转换为日期时间时发生异常
本文关键字:时间 异常 日期 隐藏 字段 转换 | 更新日期: 2023-09-27 18:11:03
我正面临一个关于类型转换的问题。值来自数据库存储过程。我将这个值像这样存储在这个隐藏字段中
<asp:HiddenField id="hfScheduleDate" runat="server" value='<%#Eval("ScheduleDate") %>' />
,并尝试像这样转换。
DateTime Date = Convert.ToDateTime(hfScheduleDate.Value);
现在给出一个异常。
字符串未被识别为有效的日期时间。
这样做有点"危险"。这里有几个选项:
- 直接从数据库中读取,而不首先将其转换为字符串
- DateTime.ParseExact使用。请参阅MSDN日期时间。
- 使用转换。ToDateTime与CultureInfo对象。有关更多详细信息和示例,请参阅此MSDN如何操作。
必须像这样为转换方法提供CultureInfo
string Date = Convert.ToDateTime("01/02/09",
new CultureInfo("en-US")).ToString("yyyy-MMM-dd");
//Results 2009-Jan-02
string Date = Convert.ToDateTime("01/02/09",
new CultureInfo("ru-RU")).ToString("yyyy-MMM-dd");
//Results 2009-Feb-01
string Date = Convert.ToDateTime("01/02/09",
new CultureInfo("ja-JP")).ToString("yyyy-MMM-dd");
//Results 2001-Feb-09
您可以搜索许多其他格式
Convert.ToDateTime
方法使用DateTime.Parse
方法与您的CurrentCulture
设置默认。
这意味着(我假设您的05是您的月份部分),您的CurrentCulture
没有yyyy/MM/dd HH:mm:ss
标准日期和时间格式。1
作为一种选择,您可以使用自定义日期和时间格式提供精确的格式,并将/
作为DateSeparator
, :
作为TimeSeparator
,如InvariantCulture
(如果您当前的文化没有这些)
DateTime Date = DateTime.ParseExact(hfScheduleDate.Value, "yyyy/MM/dd HH:mm:ss",
CultureInfo.InvariantCulture);
1: 由于/
格式说明符是自定义日期和时间格式中的日期分隔符,它将默认使用CurrentCulture
的DateSeparator