【问题标题】:DateFormat issue using linq query(between)使用 linq 查询的 DateFormat 问题(之间)
【发布时间】:2015-04-16 08:02:10
【问题描述】:

我在 linq 中的查询之间使用。场景是我选择开始日期和结束日期并想要检索这些日期之间的数据。在本地系统上它工作正常,但是当我将它部署到服务器上时它抛出异常。

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

需要以文本框格式输入的数据:04/01/2015

数据以数据库格式存储:2013-10-23 12:35:56.593

protected void _btnSearch_Click(object sender, EventArgs e)
    {
        using (DataClassesCABEEDataContext db = new DataClassesCABEEDataContext())
        {
            var query = (from a in db.Jobs where 
                         (a.Job_DateTime >= Convert.ToDateTime(_txtFrom.Text)
                         && a.Job_DateTime <= Convert.ToDateTime(_txtTo.Text)) //using add watch here
                         select new
                         {
                             Reference = a.Job_No,
                             Booking_Time = a.Job_DateTime.Value.ToString("HH:mm", CultureInfo.CurrentCulture),                                 
                             Cust_Name = a.CustName,                                 
                             Price = a.Price,                             
                         });

            GridView1.DataSource = query;
            GridView1.DataBind();
        }  
    }

在调试代码时,当我在上面注释的代码行中使用 add watch 时,它会引发异常。 _txtTo.Text 抛出此异常。当在彼此之间交换文本框时,例如将 _txtTo.text 放置在 _txtFrom.text 位置,反之亦然,然后它在 _txtFrom.text 上引发异常。相比之下,第一部分获取日期,但第二部分没有。

【问题讨论】:

  • 你的CurrentCulture 是什么?你确定你用正确的数据库类型存储你的DateTime 值吗?希望您不要将它们存储为角色。
  • "en-US" 是当前文化
  • 你确定吗? Convert.ToDateTime("04/01/2015", CultureInfo.GetCultureInfo("en-US")) 解析良好。
  • @SonerGönül...数据以日期时间格式存储在数据库中...
  • 在“GridView1.DataSource = query;”之前使用 imedeate 窗口查看 linq 生成的查询。使用“query.ToString()”

标签: c# asp.net linq linq-to-sql datetime-format


【解决方案1】:

如果你知道日期的格式,你应该使用 DateTime.ParseExact

 (a.Job_DateTime >= DateTime.ParseExact(_txtFrom.Text, "dd/MM/yyyy",  CultureInfo.InvariantCulture)
                && a.Job_DateTime <=  DateTime.ParseExact(_txtTo.Text, "dd/MM/yyyy",CultureInfo.InvariantCulture)))

【讨论】:

  • 错误:方法 'ParseExact' 没有重载需要 2 个参数
  • 啊,对不起,我忘记了文化。我猜你的日期格式是“dd/MM/yyyy”,而不是“MM/dd/yyyy”。
猜你喜欢
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多