C#で1年を表すTimespan構造を取得したいと思います。
トリッキーなことは、年が何であるかは、それがどこから始まるかに依存するということです。
できるよ
DateTime now = DateTime.Now;
TimeSpan span = now.AddYears(1) - now;
これにより、現時点から1年後までの1 year timespan
が得られます。
ここでの重要な質問は、何年ですか?
期間の長さは、希望する年がうるう年であるかどうか、およびいつ開始するかによって明らかに異なります。
今日から1年が必要な場合は、@ seheの回答を参考にしてください。
今年は@Oyvindを利用したい場合は、
妥当な概算が必要な場合は、@ Nayanを使用するか、365.25の概算を使用できます。
TimeSpan oneYearSpan = new TimeSpan(365, 6, 0, 0);
1年の長さが固定されていないため、できません(365日または366日ですか、それとも約365。25日ですか?)。だからこそ、TimeSpanとして1か月を過ごすことができないのです(28、29、30、31日??)
DateTime intialDate = Date.Now.Date;
TimeSpan yearSpan = intialDate.AddYears(1).Subtract(intialDate)
他の人が言っているように、うるう年を検討することをお勧めします。その場合、それに応じてinitialDateを開始できます。
大まかな例:
TimeSpan oneYearSpan = new TimeSpan(365, 0, 0, 0);
これでいいですか?
かなり正確にしたい場合は、1年のナノ秒数を使用できます。これは1世紀ごとに0.5秒ずつ動くと思うので、まだ長い間は良いはずです!
public TimeSpan MyYear
{
get
{
// Year = 3.1556926 × 10^16 nanoseconds
return new TimeSpan(31556926000000000);
}
}
このページにはすでにいくつかの良い答えがあります。これは単なる別のオプションです。
これを行う方法は、IsLeapYearを使用して日数を決定する方法です。
int span = DateTime.IsLeapYear(1996) ? 366: 365;
var year1996 = new TimeSpan(span, 0, 0, 0);
すべての年が同じ長さであるとは限らないため、表現する年によって異なります。
これは、たとえば2010年の長さを見つける方法です。
var timestamp = new DateTime(2011, 1, 1) - new DateTime(2010, 1, 1);
DateTimes
で年を変更して、必要な年の長さを見つけます。