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

6
我正在使用C#编写一个算法,根据输入的字符串计算过去的日期时间,具体要求如下:
字符串包含一个整数,后面跟着'D'、'M'或'Y'中的一个,例如"1D"或"90M"。
输出结果是当前日期时间减去相应数量的天数、月数或年数。
问题在于,如果我在正则表达式中切换输入字符串(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天,那将会非常不准确。

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

谢谢!


1
你对如何实现它有什么想法吗?因为到目前为止,你的技术看起来像是:“在SO上问一下,也许会有人帮我做”。告诉我们你已经尝试过什么了! - John Saunders
5个回答

15

出于某种奇怪的原因,我认为我需要使用SubtractDays等方法来实现这个目标。结果发现添加负数具有相同的效果。我可能需要重新学习基本代数课程...谢谢! - Nick Vaccaro

3

你可以尝试使用 AddDays/AddMonths/AddYears 方法并输入负数来达到相同的效果。

来自DateTime.AddDays Method

值参数可以是正数或者负数

然后,您可以使用 switch 语句来应用适当的 Add 方法。


0
为了减去月份,我创建一个新的DateTime对象并仅计算月份和年份。所以1/2010 - 6个月就是6/2010...一旦你确定了月份和年份,你可以查看原始日期时间(day component),确保它符合该月份。
这就是我所做的。年份的计算方式相同。减去天数很容易,可以使用TimeSpan组件来实现。

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接