在C#中计算过去的日期时间

时间:2010-03-01 20:58:16

标签: c# datetime timespan

我正在使用C#中的算法来根据具有以下特征的输入字符串计算过去的DateTime:

该字符串包含一个整数,后跟“D”,“M”或“Y”,例如“1D”或“90M”。

输出将是DateTime.Now减去相应的天数,月数或年数。

我遇到的问题是,例如,如果我在Regex(D,M或Y)上切换输入字符串并从DateTime.Now中减去相应的TimeSpan,则新的TimeSpan()构造函数不接受月份或几年,只有几天。

if (new Regex(@"[0-9]+D").IsMatch(value))
{
    newDate = DateTime.Now - TimeSpan(Int32.Parse(value.Replace("D", "")), 0, 0);
}

如果输入字符串是几天,这个逻辑很好,但TimeSpan的构造函数不接受数月或数年,如果我假设每个月有30天,或者每年有365天,那么这将是非常不准确的。 / p>

有没有人想过如何实现这个算法?

谢谢!

5 个答案:

答案 0 :(得分:15)

DateTimeAddMonthsAddDaysAddYears方法。使用它们减去

答案 1 :(得分:3)

您是否可以尝试使用 AddDays / AddMonths / AddYears 但使用负数?

来自DateTime.AddDays Method

  

值参数可以是负数或   正。

然后可能只是实现一个开关stament来应用适当的Add方法。

答案 2 :(得分:0)

要减去几个月,我会创建一个新的DateTime,只评估月/年。所以1/2010 - 6个月将是6/2010 ...一旦你建立了月/年,你可以查看原始日期时间组件,并确保它适合月份。

这就是我所做的。年份的评估方式相同。减去日子很容易;使用TimeSpan组件来完成它。

答案 3 :(得分:0)

请注意,您也可以添加负数,然后查看this methodthis one

答案 4 :(得分:0)

http://msdn.microsoft.com/en-us/library/3z48198e.aspx TimeSpan.TryParse接受非常接近您的字符串,只要您可以适合其格式或从您的格式转换为它。