我想从当前日期中减去上一个日期。上一个日期可能是 2 个月零 15 天或 1 年 9 个月零 10 天......像这样等等......所以请我如何用 C# 编写编码。多谢。
6 回答
使用任何答案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
请注意,这并没有给出 9 月 26 日,因为日期/时间算术有点疯狂。如果您将时间段添加到 9 月 26 日,您会得到今天……但这不是一回事。将此视为警告,您需要非常小心地描述您想要实现的目标:)
但是,您可以很容易地使用 BCL 来完成第二面:
DateTime today = new DateTime(2013, 2, 8);
DateTime start = today.PlusYears(-4).PlusMonths(-4).PlusDays(-13);
但是,没有 BCL 类型来表示“年、月、日”的值。
你的问题有点令人困惑。您是要从另一个日期中减去一个日期,还是要从一个日期中减去一段时间。
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;
但是,如果您想要的话,您必须自己计算一个月的长度。
当您在 C# 中减去两个日期时,您会得到一个 TimeSpan 对象。您可以访问它的不同属性以获取实际的天数、小时数、分钟数等。它代表:
DateTime a;
DateTime b;
//assign some values
TimeSpan span = a.Subtract(b);
Console.WriteLine("Days: " + span.Days);
以下应该做。
TimeSpan diff = DateTime.Now - previousDate;
您可以使用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;
TimeSpan timeSpan = new TimeSpan(2,2,0);
DateTime dateTime = DateTime.Now.Subtract(timeSpan);