首页 文章

如何获得1年的Timespan?

提问于
浏览
23

我希望得到一个代表C#一年的Timespan结构 .

8 回答

  • 1

    棘手的是,一年是什么,取决于它的起点 .

    你可以做

    DateTime now = DateTime.Now;
    TimeSpan span = now.AddYears(1) - now;
    

    从现在到一年之后,这将给你 1 year timespan

  • 1

    这里的关键问题是:哪一年?

    时间长度显然取决于您想要的年份是否是闰年以及何时开始 .

    如果你想从今天开始一年,请使用@ sehe的答案 .

    如果你想要今年的@Oyvind,

    如果你想要一个合理的近似值,你可以使用@Nayan,或使用365.25近似值:

    TimeSpan oneYearSpan = new TimeSpan(365, 6, 0, 0);
    
  • 0

    你不能,因为一年没有固定长度(365或366天或约365.25?) . 这就是为什么你不能像TimeSpan一样有一个月(28,29,30,31天?)

  • 1

    粗略的例子:

    TimeSpan oneYearSpan = new TimeSpan(365, 0, 0, 0);
    

    这会吗?

  • 2
    DateTime intialDate = Date.Now.Date;
    TimeSpan yearSpan = intialDate.AddYears(1).Subtract(intialDate)
    

    正如其他人提到的那样,你可能想要考虑闰年 . 在这种情况下,您可以相应地启动intialDate .

  • 1

    如果你想要非常准确,你可以使用一年中纳秒的数量 . 我认为这每个世纪都会移动0.5秒,所以应该很长一段时间好!

    public TimeSpan MyYear
    {
        get
        { 
            // Year = 3.1556926 × 10^16 nanoseconds
            return new TimeSpan(31556926000000000);
        }
    }
    

    这个页面上已有一些很好的答案,这只是另一种选择 .

  • 0

    这取决于你想要代表哪一年,因为并非所有年份的长度相等 .

    这是查找2010年长度的方法,例如:

    var timestamp = new DateTime(2011, 1, 1) - new DateTime(2010, 1, 1);
    

    更改 DateTimes 中的年份以查找所需年份的长度 .

  • 40

    这是如何做到这一点,利用IsLeapYear来阻止一天的数量 .

    int span = DateTime.IsLeapYear(1996) ? 366: 365;
    var year1996 = new TimeSpan(span, 0, 0, 0);
    

相关问题