web-dev-qa-db-ja.com

1年の期間を取得するにはどうすればよいですか?

C#で1年を表すTimespan構造を取得したいと思います。

24
Florian

トリッキーなことは、年が何であるかは、それがどこから始まるかに依存するということです。

できるよ

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

これにより、現時点から1年後までの1 year timespanが得られます。

42
sehe

ここでの重要な質問は、何年ですか?

期間の長さは、希望する年がうるう年であるかどうか、およびいつ開始するかによって明らかに異なります。

今日から1年が必要な場合は、@ seheの回答を参考にしてください。

今年は@Oyvindを利用したい場合は、

妥当な概算が必要な場合は、@ Nayanを使用するか、365.25の概算を使用できます。

TimeSpan oneYearSpan = new TimeSpan(365, 6, 0, 0);
3
Jon Egerton

1年の長さが固定されていないため、できません(365日または366日ですか、それとも約365。25日ですか?)。だからこそ、TimeSpanとして1か月を過ごすことができないのです(28、29、30、31日??)

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

他の人が言っているように、うるう年を検討することをお勧めします。その場合、それに応じてinitialDateを開始できます。

1
Maheep

大まかな例:

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

これでいいですか?

1
Nayan

かなり正確にしたい場合は、1年のナノ秒数を使用できます。これは1世紀ごとに0.5秒ずつ動くと思うので、まだ長い間は良いはずです!

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

このページにはすでにいくつかの良い答えがあります。これは単なる別のオプションです。

1
Matt

これを行う方法は、IsLeapYearを使用して日数を決定する方法です。

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

すべての年が同じ長さであるとは限らないため、表現する年によって異なります。

これは、たとえば2010年の長さを見つける方法です。

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

DateTimesで年を変更して、必要な年の長さを見つけます。

0