将隐藏字段值转换为日期时间时发生异常

本文关键字:时间 异常 日期 隐藏 字段 转换 | 更新日期: 2023-09-27 18:11:03

我正面临一个关于类型转换的问题。值来自数据库存储过程。我将这个值像这样存储在这个隐藏字段中

<asp:HiddenField id="hfScheduleDate" runat="server"  value='<%#Eval("ScheduleDate") %>' />

,并尝试像这样转换。

DateTime Date = Convert.ToDateTime(hfScheduleDate.Value);

现在给出一个异常。

字符串未被识别为有效的日期时间。

将隐藏字段值转换为日期时间时发生异常

这样做有点"危险"。这里有几个选项:

  1. 直接从数据库中读取,而不首先将其转换为字符串
  2. DateTime.ParseExact使用。请参阅MSDN日期时间。
  3. 使用转换。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: 由于/格式说明符是自定义日期和时间格式中的日期分隔符,它将默认使用CurrentCultureDateSeparator