我错过了一些简单的东西吗? 我想在给定日期之前的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应该是一致的。我正在创建一些测试日期边界的东西。
我忽略了一些简单的事情吗?
感谢。
答案 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