我希望得到一个Timespan结构,代表C#中的一年。
答案 0 :(得分:41)
棘手的是,一年是什么,取决于它的起点。
你可以做到
DateTime now = DateTime.Now;
TimeSpan span = now.AddYears(1) - now;
这会从当前时刻到一年后给你1 year timespan
答案 1 :(得分:2)
这里的关键问题是:哪一年?
时间长度显然取决于您想要的年份是否是闰年以及何时开始。
如果你想从今天开始一年,请使用@ sehe的答案。
如果您希望今年使用@Oyvind,
如果你想要一个合理的近似值,你可以使用@Nayan,或使用365.25近似值:
TimeSpan oneYearSpan = new TimeSpan(365, 6, 0, 0);
答案 2 :(得分:1)
你不能,因为一年没有固定的长度(365或366天或约365.25?)。这也是为什么你不能有一个月的TimeSpan(28,29,30,31天??)
答案 3 :(得分:1)
DateTime intialDate = Date.Now.Date;
TimeSpan yearSpan = intialDate.AddYears(1).Subtract(intialDate)
正如其他人提到的,你可能想要考虑闰年。在这种情况下,您可以相应地启动初始日期。
答案 4 :(得分:1)
粗略的例子:
TimeSpan oneYearSpan = new TimeSpan(365, 0, 0, 0);
这会吗?
答案 5 :(得分:1)
如果你想要非常准确,你可以使用一年中纳秒的数量。 我认为这每个世纪都会移动0.5秒,所以应该很长一段时间好!
public TimeSpan MyYear
{
get
{
// Year = 3.1556926 × 10^16 nanoseconds
return new TimeSpan(31556926000000000);
}
}
此页面上已有一些很好的答案,这只是另一种选择。
答案 6 :(得分:0)
这取决于您想要代表哪一年,因为并非所有年份的长度相等。
这是查找2010年长度的方法,例如:
var timestamp = new DateTime(2011, 1, 1) - new DateTime(2010, 1, 1);
更改DateTimes
中的年份以查找所需年份的长度。
答案 7 :(得分:0)
以下是如何执行此操作,利用IsLeapYear确定当天的数量。
int span = DateTime.IsLeapYear(1996) ? 366: 365;
var year1996 = new TimeSpan(span, 0, 0, 0);