C#在单个DateTime变量中添加年和日

时间:2017-02-13 17:01:45

标签: c# datetime

我错过了一些简单的东西吗? 我想在给定日期之前的17年和364天计算一个日期。

有没有办法在不将所有内容转换为天的情况下执行此操作?我试图避免处理闰年。我正在做以下事情:

DateTime date = Convert.ToDateTime(tId2);
string tId4a = Convert.ToString(tId4);
var age1 = tId4a.Substring(0, 2);
int age2 = Convert.ToInt32(age1) - 1;
DateTime sub1 = date.AddYears(-age2);

我希望做一些简单的事情:

DateTime sub1 = date.AddYears(-age2) + date.AddDays(-364);

我被告知我不能使用' +'在DateTime。

抱歉,我是新来的。使用age2变量的原因是因为有时该值会发生变化。但是,364应该是一致的。我正在创建一些测试日期边界的东西。

我忽略了一些简单的事情吗?

感谢。

4 个答案:

答案 0 :(得分:3)

您所做的是将“age2年前的日期”添加到“364天前的日期”。

而是这样做:

DateTime sub1 = date.AddYears(-age2).AddDays(-364)

这首先减去年份,然后从结果值中减去天数。

答案 1 :(得分:2)

您无法添加日期,但您当然可以将方法调用链接在一起

date.AddYears(-age2).AddDays(-364);

这与所有意图和目的相同,都是尝试将它们组合在一起。

答案 2 :(得分:1)

这真的听起来像你想要在4年前使用,但在那之后再去第二天。

你这样做的方法是从中减去1以获得age2。然后你减去那么多年,你也减去你的约会364天。这对闰年会更敏感。如果生成的日期恰好在闰年的1月1日到2月28日之间,那么最终会比您想要的晚一天。

364是一个非常可疑的数字。我倾向于认为你用它来表示“一年中的天数减去一天”。但是一年中的天数并不总是365天。在闰年中,天数是366.在这些年中,减去364不是一天不到一年。它实际上是不到一年的2天,所以你会离开。

你真正应该做的,如果我正在读你的话,就是减去年数,然后加上一天。

DateTime date = Convert.ToDateTime(tId2);
string tId4a = Convert.ToString(tId4);
int age = Convert.ToInt32(tId4a.Substring(0, 2))
DateTime sub1 = date.AddYears(-age).AddDays(1);

答案 3 :(得分:1)

我认为提及DateTime是一个对象,而.AddYears().AddDays()等都返回一个新的DateTime对象是很有价值的,这就是为什么你不能像原始类型一样将它们添加到一起。所以当你跑:

DateTime sub1 = date.AddYears(-age2).AddDays(-364);

date.AddYears(-age2)返回一个新对象,然后.AddDays(-364)正在使用新的DateTime对象,而不是日期实例。

欲了解更多信息:

https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx