2011-12-02 53 views
23

我想獲得代表C#中的一年的Timespan結構。如何獲得1年的Timespan?

+2

[TimeSpan](http://msdn.microsoft.com/en-us/library/system.timespan.aspx)是一個結構,而不是一個對象:-) –

+1

閏年,正常年份或平均年份? –

+1

這個問題引發了一個很好的討論+1 – Matt

回答

33

棘手的是,一年是多少,取決於它從哪裏開始。

你可以做

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

這將使您從當前時刻的1 year timespan到一年後

+0

sehe是正確的一年的時間跨度對每個起點都是唯一的。 –

+0

太好了,謝謝,但你能否添加一些它如何表現的例子?爲什麼1年的時間跨度取決於它從哪裏開始很重要?現在我無法想象哪裏可能是問題,但我知道它必須在某個地方:)謝謝 – Zavael

+1

哦現在我意識到,爲什麼當我添加1年像這個答案,然後得到XmlConvert.ToString(跨度)它總是從一年開始的日子...我想要一個像PnYnMnDnHnMnS這樣的輸出......並且它總是使得PnDnH ...這些年份和月份不存在爲什麼? – Zavael

2

你不能,因爲一年沒有固定的長度(是365或366天或約365.25?)。這也是爲什麼你不能有一個月時間跨度爲(28,29,30,31天??)

+4

並忘記了閏秒和其他異常...秒...... – sehe

+0

@BoltClock:是啊漢斯用他的空閒秒鐘之一忍者編輯,在右:) – sehe

+0

@sehe:這就是你所說的快速沒有它的編輯顯示爲一個,很酷! – leppie

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

至於其他peoplehave提到你可能要考慮閏年。在這種情況下,您可以相應地引入intialDate。

2

粗糙例如:

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

請問這個怎麼辦?

+2

如果這是一個閏年? –

+0

我知道! :)這就是爲什麼粗略的例子。我的投票是爲了sehe。 – Nayan

0

這取決於你想表示哪一年,因爲不是所有年份的長度都相等。

這是尋找2010的長度,例如方式:找到你想要的一年的長度

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

變化的一年中DateTimes

1

這裏的關鍵問題是:哪一年?

時間長度的長短明顯取決於你想要的年份是否是閏年,以及它是否開始。

如果你想從今天開始的一年去@ sehe的答案。

如果您想當年去與@Oyvind,

如果你想有一個合理的近似可以用@Nayan去,或者爲365.25近似使用:

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

這裏的怎麼辦這一點,利用IsLeapYear來確定一天的數量。

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

並非每一次持續時間在1月1日開始持續。不要這樣做。 – oerkelens

1

如果你想要相當準確,你可以使用一年中納秒的數量。 我覺得這個每百年運動0.5秒,所以應該好久好久!

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

已經有這個頁面上一些很好的答案,這只是另一種選擇。

+1

而在閏年中,你可以休息一整天,避開人們期望的東西。不是上帝的主意。 – oerkelens