【问题标题】:How do I compare datetime with value from datepicker?如何将 datetime 与 datepicker 中的值进行比较?
【发布时间】:2016-08-02 08:25:25
【问题描述】:

我需要将所选日期与数据库中的日期进行比较,并返回日期范围内的值,但格式一直不正确。数据库中的日期格式为 2016-01-02 00:00:00.000(来自其中一行)

我正在使用下面的代码,但无法比较并不断收到“字符串未被识别为有效的日期时间”。帮忙?

protected void RadPushButton1_Click(object sender, EventArgs e)
    {
        DateTime startDate = DateTime.Parse(RadDatePickerStart.SelectedDate.ToString());
        string s = startDate.Date.ToString("yyyy-dd-MM");
        startDate = DateTime.Parse(s+"12:00:00 AM");
        // DateTime endDate = DateTime.Parse(RadDatePickerEnd.SelectedDate.ToString());
        EMCSettlementManager man = new EMCSettlementManager();
        Grid.DataSource = man.GetSTL010(r => EntityFunctions.TruncateTime( r.settlement_date) >= startDate);
        Grid.DataBind();
    }

【问题讨论】:

  • 哪个解析抛出了这个错误?
  • 为什么要将DateTime 转换为String 并返回? DateTime 不存储显示格式,只有 DateTime 的字符串表示形式。
  • 如果您已经拥有DateTimes,请不要摆弄字符串和DateTime.ParseDateTime 有类似 AddHours 的方法

标签: c# sql linq datetime compare


【解决方案1】:

如果要比较日期,请确保所有值的类型均为 DateTime,而不是 String

试试这样的:

DateTime startDate = RadDatePickerStart.SelectedDate;
EMCSettlementManager man = new EMCSettlementManager();
Grid.DataSource = man.GetSTL010(r => r.settlement_date >= startDate);

如果你想摆脱时间部分,你可以这样做:

DateTime startDate = RadDatePickerStart.SelectedDate.Date;

如果数据库中的字段是字符串类型,而不是日期时间,请将其转换为日期(时间)类型。在任何地方都使用字符串是一个糟糕的选择,也称为“字符串类型”。 (见:https://blog.codinghorror.com/new-programming-jargon/

【讨论】:

  • 我试过了,但得到了“无法隐式转换'System.DateTime?'到'System.DateTime'。存在显式转换(您是否缺少演员表))“所以我认为日期格式可能不同,例如 yyyymmdd 而不是 yyyyddmm,这就是为什么我试图将其变成字符串来更改它。我在日期选择器中缺少的是“.value”。 DateTime startDate = RadDatePickerStart.SelectedDate.value;现在可以了。谢谢!
猜你喜欢
  • 2016-11-24
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 2018-09-16
  • 2020-05-30
相关资源
最近更新 更多