-3

DateTime「年」の2つのオブジェクト間の差(年)を正確に取得するにはどうすればよいですか?

DateTime.Subtract()に差がTimeSpanあり、最大額は日数です。

それで、正確に知りたいのであれば、今日と1988年の日(たとえば1988年3月29日)の違いは、この人の正確な年齢を取得するための「より簡単な」方法はありますか?

私が試したことは:

DateTime March291988 = DateTime.Parse("29/03/1988");
TimeSpan ts = DateTime.Now.Subtract(March291988);
int years = (ts.Days/365);

さらに重要なのは、TimeSpanからDateTimeに変換する方法です。

4

2 に答える 2

13

私は偏見がありますが、野田タイムを使用します:

var date1 = new LocalDate(1988, 3, 29);
var date2 = new LocalDate(2013, 1, 23); // See note below
var years = Period.Between(date1, date2, PeriodUnits.Years).Years;

基本的に、BCLは、このようなものを操作するための非常に簡単な方法を提供しません。特定の開始点/終了点に固定されていないため、実際には必要ありません。TimeSpanある値を別の値から減算Yearして、それが間違ったことをするかどうかを調整することができますが、それは少し厄介です。

元のコードでは、を使用しDateTime.Nowました。Noda Timeでは、時計を依存関係として扱い、SystemClock.Instance通常の本番環境で実装します。AnIClockはタイムゾーンを知りません-現在の瞬間を知っているだけです-したがって、どのタイムゾーンに関心があるかを言う必要があります。次に例を示します。

var today = clock.Now.InZone(zone).LocalDateTime.Date;

これは時間がかかるように思われることは知っていますが、すべての異なる変換を分離して、すべてをより明確にします。(これを少し減らすために、Dateプロパティを導入する場合があります。)ZoneDateTime

于 2013-01-23T09:58:43.757 に答える
1

年齢を年単位で取得する方法は次のとおりです。

static int AgeInYears(DateTime birthday, DateTime today)
{
    return ((today.Year - birthday.Year) * 372 + (today.Month - birthday.Month) * 31 + (today.Day - birthday.Day)) / 372;
}

これはうるう年を説明し、誕生日に正確に年齢を増やします。

于 2013-01-23T10:06:43.500 に答える