1

我想从当前日期中减去上一个日期。上一个日期可能是 2 个月零 15 天或 1 年 9 个月零 10 天......像这样等等......所以请我如何用 C# 编写编码。多谢。

4

6 回答 6

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

请注意,这并没有给出 9 月 26 日,因为日期/时间算术有点疯狂。如果您将时间段添加到 9 月 26 日,您会得到今天……但这不是一回事。将此视为警告,您需要非常小心地描述您想要实现的目标:)

但是,您可以很容易地使用 BCL 来完成第二面:

DateTime today = new DateTime(2013, 2, 8);
DateTime start = today.PlusYears(-4).PlusMonths(-4).PlusDays(-13);

但是,没有 BCL 类型来表示“年、月、日”的值。

于 2013-02-08T09:15:05.297 回答
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;

但是,如果您想要的话,您必须自己计算一个月的长度。

于 2013-02-08T09:12:07.523 回答
0

当您在 C# 中减去两个日期时,您会得到一个 TimeSpan 对象。您可以访问它的不同属性以获取实际的天数、小时数、分钟数等。它代表:

DateTime a;
DateTime b;

//assign some values

TimeSpan span = a.Subtract(b);
Console.WriteLine("Days: " + span.Days);
于 2013-02-08T09:12:14.613 回答
0

以下应该做。

TimeSpan diff = DateTime.Now - previousDate; 
于 2013-02-08T09:12:57.307 回答
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;
于 2013-02-08T09:11:35.293 回答
0
TimeSpan timeSpan = new TimeSpan(2,2,0);
DateTime dateTime = DateTime.Now.Subtract(timeSpan);
于 2013-02-08T09:11:48.987 回答