我想从当前日期中减去上一个日期。上一个日期可能是2个月和15天或1年9个月和10天......像这样等...所以请问我怎样才能用C#编写Coding。非常感谢。
答案 0 :(得分:3)
使用TimeSpan
的任何答案不都能为您提供“2个月和15天” - 因为一个月的长度会随着时间的推移而变化。
使用基类库执行此操作很痛苦......这是我启动Noda Time项目的原因之一。在其他功能中,它允许您确定日期之间的Period
(或日期和时间等)。
例如,让我们看看我在Stack Overflow上的时间:
LocalDate today = new LocalDate(2013, 2, 8);
LocalDate start = new LocalDate(2008, 9, 26);
// This defaults to using year, month, day units. You can specify alternatives.
Period period = Period.Between(start, today);
Console.WriteLine("{0} years; {1} months; {2} days",
period.Years, period.Months, period.Days);
输出:
4 years; 4 months; 13 days
或者如果实际想从日期中减去一段时间(问题不是很清楚),你也可以这样做:
Period period = new PeriodBuilder { Years = 4, Months = 4, Days = 13 }.Build();
LocalDate today = new LocalDate(2013, 2, 8);
LocalDate start = today - period;
Console.WriteLine(start);
输出:
25 September 2008
请注意,由于somewhat crazy nature of date/time arithmetic,此不会给出9月26日。如果你添加这段时间到9月26日你今天就会得到......但这不是一回事。将此视为一个警告,您需要真正小心地描述您想要实现的目标:)
你的第二方可以很容易地使用BCL:
DateTime today = new DateTime(2013, 2, 8);
DateTime start = today.PlusYears(-4).PlusMonths(-4).PlusDays(-13);
虽然没有BCL类型来表示“年,月,日”的价值。
答案 1 :(得分:2)
你的问题有点令人困惑。是否要从另一个日期中减去一个日期,或者是否要从日期中减去一段时间。
<强> 1。从另一个日期减去一个日期:
DateTime previousDate = new DateTime(1990, 12, 12);
DateTime currentDate = DateTime.UtcNow;
TimeSpan difference = currentDate - previousDate;
然后,您可以使用TimeSpan
方法根据需要在不同的时间单位中获得差异。
以下是有关TimeSpan的更多信息:http://msdn.microsoft.com/en-us/library/system.timespan.aspx
<强> 2。从日期减去一段时间
DateTime currentDate = DateTime.UtcNow;
TimeSpan periodOfTime = new TimeSpan(12, 12, 0, 0);
DateTime newDate = currentDate - periodOfTime;
然而,你必须自己计算一个月的长度,如果这是你想要的。
答案 2 :(得分:0)
您可以使用DateTime.Subtract
。
文章中的例子:
System.DateTime date1 = new System.DateTime(1996, 6, 3, 22, 15, 0);
System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2, 0);
System.DateTime date3 = new System.DateTime(1996, 10, 12, 8, 42, 0);
// diff1 gets 185 days, 14 hours, and 47 minutes.
System.TimeSpan diff1 = date2.Subtract(date1);
// date4 gets 4/9/1996 5:55:00 PM.
System.DateTime date4 = date3.Subtract(diff1);
// diff2 gets 55 days 4 hours and 20 minutes.
System.TimeSpan diff2 = date2 - date3;
// date5 gets 4/9/1996 5:55:00 PM.
System.DateTime date5 = date1 - diff2;
答案 3 :(得分:0)
TimeSpan timeSpan = new TimeSpan(2,2,0);
DateTime dateTime = DateTime.Now.Subtract(timeSpan);
答案 4 :(得分:0)
当你在C#中减去两个日期时,你会得到一个TimeSpan对象。 你可以访问它的不同属性来获得它代表的实际天数,小时数,分钟数等。
DateTime a;
DateTime b;
//assign some values
TimeSpan span = a.Subtract(b);
Console.WriteLine("Days: " + span.Days);
答案 5 :(得分:0)
以下情况应该如此。
TimeSpan diff = DateTime.Now - previousDate;