日期差异返回错误答案

时间:2013-02-12 06:31:52

标签: c# asp.net datetime datepicker

我真的希望对我遇到的这个问题提供一些指导。 我试图找出文本框中两个日期之间的区别。

   protected void Button1_Click(object sender, EventArgs e)
{
    a = TextBox1.Text.ToString().Trim();
    b = TextBox2.Text.ToString().Trim();
    DateTime c = new DateTime();
    DateTime d = new DateTime();
    c = Convert.ToDateTime(a);
    d = Convert.ToDateTime(b);
    System.TimeSpan diffr = d - c;
    Response.Write(diffr.Days);
}

以上是我在Button Click事件上编写的代码。 问题是,代码返回差异错误。

即如果要找到12/02/2013和11/02/2013之间的差异,而不是返回1 代码返回30。 同样可以找到12/02/2013和10/02/2013之间的差异,而不是返回2 代码返回61。

我正在使用Jquery DatePicker来选择日期! 请帮助,因为我的所有搜索都没有产生任何解决方案。

5 个答案:

答案 0 :(得分:2)

在进行减法之前,您应该将日期格式转换为dd / mm / yyyy。 所以这是你的最终代码 -

protected void Button1_Click(object sender, EventArgs e)
{
        string a, b;
        a = TextBox1.Text.ToString().Trim();
        b = TextBox2.Text.ToString().Trim();
        DateTime c = new DateTime();
        DateTime d = new DateTime();
        c = Convert.ToDateTime(a);
        d = Convert.ToDateTime(b);

        DateTime to_datetime = DateTime.ParseExact(a, "dd/MM/yyyy",
                                           System.Globalization.CultureInfo.InvariantCulture);
        DateTime from_datetime = DateTime.ParseExact(b, "dd/MM/yyyy",
                                                     System.Globalization.CultureInfo.InvariantCulture);
        System.TimeSpan diffr = to_datetime - from_datetime;
        Response.Write(diffr.Days);
}

答案 1 :(得分:1)

唯一的问题是格式的日期 正如您所写,它显示的是月份差异,而不是日期差异 尝试使用datetime.parseexact并指定格式

实施例: -

 string poop = "2005-12-14T14:35:32.1700000-07:00";
 DateTime poo = DateTime.ParseExact(poop,"yyyy-MM-ddTHH:mm:ss.fffffffzzz",        
                                System.Globalization.CultureInfo.InvariantCulture);

在你的情况下

 string sDate1=TextBox1.Text.ToString().Trim();
 string sDate2=TextBox1.Text.ToString().Trim();

 DateTime dt1= DateTime.ParseExact(sDate1,"MM-dd-yyyy",        
                                System.Globalization.CultureInfo.InvariantCulture);
 DateTime dt2= DateTime.ParseExact(sDate2,"MM-dd-yyyy",        
                                System.Globalization.CultureInfo.InvariantCulture);

 System.TimeSpan diffr =dt2 - dt1;
 Response.Write(diffr.Days);

它应该有用。

答案 2 :(得分:1)

您可以将jQuery datepicker的日期格式更改为

$("#txtDate.datepicker").datepicker({ dateFormat: 'mm-dd-yy' });

在jQuery中,您可以将测试解析为

var dateInJs = $.datepicker.parseDate('mm-dd-yy', $('#txtDate.datepicker').val());

或者在.NET中,您可以将'dd-MM-yyyy'格式的日期解析为

DateTime.ParseExact(txtDate.Text, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);

你也可以在.NET中使用CultureInfo

DateTime Date = DateTime.Parse(txtDate.Text, System.Globalization.CultureInfo.CreateSpecificCulture("hi-IN"));

答案 3 :(得分:0)

也许您可以使用TimeSpan

DateTime startTime = '';
DateTime endTime = '';

TimeSpan span = endTime.Subtract( startTime );

接下来,您可以使用span.Seconds, span.Days ...等

答案 4 :(得分:0)

我认为此问题是由于您的计算机日期时间格式设置造成的。请将您的计算机日期时间格式更改为dd / MM / yyyy格式,然后重试。