我想计算表格日期和两个日期之间的日期差异。如果日期差异为正,则使用时间跨度来计算两个日期之间的差异意味着它输入另一个进程则意味着它返回错误消息。
我的部分代码在这里..
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
但它返回错误消息:String未被识别为有效的DateTime。
请给我一个解决方案来解决这个问题而不改变日期格式...
答案 0 :(得分:2)
您应该使用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
格式,所以你应该依赖ParseExact
,你知道字符串的格式,并在获取结果时实现。
答案 1 :(得分:1)
您需要指定转化的文化。默认情况下,它应该使用PC的默认日期格式,但这并不总是有效。
您应该看看有关为Convert.ToDateTime方法指定格式提供程序http://msdn.microsoft.com/en-us/library/9xk1h71t.aspx
这是关于你需要创建来处理文化的DateTimeFormatInfo对象:http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx
答案 2 :(得分:1)
您必须使用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));
答案 3 :(得分:0)
你的日期格式应该是这样的。 StartDate = 1/2/2002和EndDate = 3/1/2004
答案 4 :(得分:0)
天差
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);