【问题标题】:date difference between two dates两个日期之间的日期差
【发布时间】:2025-12-17 21:00:01
【问题描述】:

我想计算表单日期和两个日期之间的日期差。如果日期差为正,则使用时间跨度来计算两个日期之间的差,这意味着它进入另一个进程,下降意味着它返回错误消息。

我的部分代码在这里..

  TimeSpan span = Convert.ToDateTime(txtenddate.Text).Subtract(Convert.ToDateTime(txtstartdate.Text));
        int formatted = span.Days;
        if (formatted < 1)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "temp", "<script language='javascript'>alert('Invalid date difference ');</script>", false);
        } 

在上面的代码中输入的是结束日期:30-01-2004 开始日期:01-02-2002

但它返回错误消息:字符串未被识别为有效的日期时间。

请在不更改日期格式的情况下给我一个解决方案...

【问题讨论】:

  • 尝试使用DateTime.ParseExact 而不是Convert.ToDateTime

标签: c# asp.net timespan


【解决方案1】:

您应该使用ParseExact 来获取相关的DateTime

TimeSpan ts = DateTime.ParseExact("30-01-2004", "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture)
                  - DateTime.ParseExact("01-02-2002", "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture);

在使用Convert.ToDateTime 时,它会调用DateTime.Parse,它将尝试与您当前的文化设置相对应的转换,因为在这种情况下不支持您拥有的DateTime 格式,因此您应该依赖@ 987654327@ 从而您知道字符串的预期格式并在获取结果时实现。

【讨论】:

    【解决方案2】:

    您需要指定转换的文化。默认情况下,它应该使用您 PC 的默认日期格式,但这并不总是有效。

    你应该看看这个关于为 Convert.ToDateTime 方法指定格式提供程序http://msdn.microsoft.com/en-us/library/9xk1h71t.aspx

    关于你需要创建的 DateTimeFormatInfo 对象来处理文化:http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx

    【讨论】:

      【解决方案3】:

      您必须使用 CultureInfo,可能是不同于“en-GB”的默认 CultureInfo;

      var cult = new System.Globalization.CultureInfo("en-GB");
      TimeSpan span = Convert.ToDateTime("30-01-2004", cult).Subtract(Convert.ToDateTime("01-02-2002", cult));
      

      【讨论】:

        【解决方案4】:

        你的日期格式应该是这样的。 StartDate=1/2/2002 和 EndDate=3/1/2004

        【讨论】:

          【解决方案5】:

          天差

            public long getDaysBetweenDates(Date d1, Date d2){
          return TimeUnit.MILLISECONDS.toDays(d1.getTime() - d2.getTime());
          }
          

          天与时间的日期差异

          Date startDate = // Set start date
          Date endDate   = // Set end date
          
          long duration  = endDate.getTime() - startDate.getTime();
          
          long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
          long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);
          long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);
          

          【讨论】: