【问题标题】:how to get only date part from date string in C#如何从 C# 中的日期字符串中仅获取日期部分
【发布时间】:2015-12-31 09:25:04
【问题描述】:

我需要采用这种格式 "2015-10-03" ,但我得到这样的 "10/3/2015" 和 "10/3/2015 12:00:00 AM" 都不适用于我的查询。因为我的更新日期数据类型仅为日期

    Fromdate = Txtbox_AjaxCalFrom.Text.Trim();//  10/3/2015
    DateTime frmdt = Convert.ToDateTime(Fromdate);// 10/3/2015 12:00:00 AM
    ToDate = Txtbox_AjaxCalTo.Text.Trim();
    DateTime todt = Convert.ToDateTime(Fromdate);

我想要这样的查询

updateddate between  '2015-10-03' and '2015-10-03' 

完整查询

   gvOrders.DataSource = GetData(string.Format("select * from GoalsRoadMap where Activities='{0}' and project ='" + ProjectName + "' and updateddate between  '2015-10-03' and '2015-10-03' ", customerId));

【问题讨论】:

  • 你的问题实际上是你需要'2015-10-03'和'2015-10-03'之间的所有项目。但它什么也没返回,对吗?
  • 是的。它回来了,什么都没有
  • 如果您尝试将值放入 SQL,请停止。根本不要那样做 - 改用参数化 SQL。这样,您根本不需要将值转换为字符串...并且您将避免 SQL 注入攻击等(对于日期来说不是那么多,而是其他值...)

标签: c# asp.net sql-server date


【解决方案1】:

您可以根据需要格式化日期字符串。假设 dt 是您的 DateTime 对象,其值为 10/3/2015 12:00:00 AM。然后你可以得到你想要的字符串表示,如下所示:

var formatted = dt.ToString("yyyy-MM-dd");

【讨论】:

  • 所以使用String 而不是var
  • var 是一种语法糖。在编译时formatted 的类型将被声明为string
  • 以所需格式获取日期,但我不知道 y 记录不会出现。@Christos
【解决方案2】:

试试这个:

DateTime frmdt = Convert.ToDateTime(fromDate); 
string frmdtString = frmdt.ToString("yyyy-MM-dd");

或一次:

string frmdt = Convert.ToDateTime(fromDate).ToString("yyyy-MM-dd");

所以您的代码可能如下所示:

Fromdate = Txtbox_AjaxCalFrom.Text.Trim();//  10/3/2015
string frmdt = Convert.ToDateTime(Fromdate).ToString("yyyy-MM-dd");
ToDate = Txtbox_AjaxCalTo.Text.Trim();
string todt = Convert.ToDateTime(todt).ToString("yyyy-MM-dd");

gvOrders.DataSource = GetData(string.Format("select * from GoalsRoadMap where Activities='{0}' and project ='" + ProjectName + "' and updateddate between  '{1}' and '{2}' ", customerId, frmdt, todt  ));

【讨论】:

    【解决方案3】:

    正如 Christos 所提到的,您可以将 DateTime 格式化为通用日期字符串(这里是示例 https://msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.110).aspx)。但是创建查询的正确方法是使用参数。下面是 SqlClient 的示例,但其他提供程序的想法是相同的。

    var cmd=new SqlCommand("UPDATE Table1 SET field1=@value WHERE dateField=@date");
    cmd.Parameters.Add("@date",SqlDbType.Date).Value=myDateTime; //myDateTime is type of DateTime
    ...
    

    并且您在 SQL 中有错误,“2015-10-03”和“2015-10-03”之间将不会返回任何内容。而是尝试这个 dateField>='2015-10-03' AND dateField

    【讨论】:

      【解决方案4】:

      如果您的 SQL 日期项目存储为日期和时间,而不仅仅是日期,那么您的问题将是对于“2015-10-03”和“2015-10-03”之间的项目,它什么也不返回。
      因此,您只需在您的 toDate.Date 中添加一天,其 Time 是 12:00:00 AM。
      像这样的:

      Fromdate = Txtbox_AjaxCalFrom.Text.Trim();//  10/3/2015
      string frmdt = Convert.ToDateTime(Fromdate).Date; // 10/3/2015 12:00:00 AM
      //Or
      //var frmdt = DateTime.Parse(Txtbox_AjaxCalFrom.Text).Date;
      ToDate = Txtbox_AjaxCalTo.Text.Trim();
      string todt = Convert.ToDateTime(todt).Date.AddDays(1);// 11/3/2015 12:00:00 AM
      

      现在,如果像这样运行您的查询,它可能会起作用:

      var items = allYourSearchItems.Where(x => x.Date >= frmdt && x.Date < todt );
      

      【讨论】:

        【解决方案5】:

        以上答案都不适合我。 分享有效的方法:

        string Text="22/11/2009";
        DateTime date = DateTime.ParseExact(Text, "dd/MM/yyyy", null);              
        Console.WriteLine("update date => "+date.ToString("yyyy-MM-dd"));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-13
          • 1970-01-01
          • 2014-06-02
          • 1970-01-01
          相关资源
          最近更新 更多