4

678日あるとしたら、その瞬間から何年、何ヶ月、何日あるのか計算する方法は?

Duration duration = Duration.FromStandardDays(678);
Instant now = SystemClock.Instance.Now;
Instant future = now + duration;

// I have to convert NodaTime.Instant to NodaTime.LocalDate but don't know how

Period period = Period.Between(now, future);
Console.WriteLine("{0} years, {1} months, {2} days", period.Years, period.Months, period.Days);
4

2 に答える 2

9

あなたは確かに野田タイムでこれを行うことができます.

まず、出発点が必要です。これは、ローカル タイム ゾーンの現在の日付を使用します。シナリオによっては、別の日または別のタイム ゾーンを使用したい場合があります。

Instant now = SystemClock.Instance.Now;
DateTimeZone timeZone = DateTimeZoneProviders.Bcl.GetSystemDefault();
LocalDate today = now.InZone(timeZone).Date;

次に、日数を追加します。

int days = 678;
LocalDate future = today.PlusDays(days);

次に、必要な単位で期間を取得できます。

Period period = Period.Between(today, future, PeriodUnits.YearMonthDay);
Console.WriteLine("{0} years, {1} months, {2} days",
                  period.Years, period.Months, period.Days);

結果が「今からの時間」を表していることを認識することが重要です。もしくは別の出発地に置き換えると「(出発地)からの時間」です。いかなる場合でも、結果が であると考えてはなりませんX days = Y years + M months + D days。1 年の日数と 1 か月の日数は、話している年と月によって異なるため、これは無意味です。

于 2014-04-02T05:58:13.013 に答える
0

現在の時刻に日数を追加するだけです。

var now = DateTime.Now;
var future = now.AddDays(678);

int years = future.Year - now.Year;
int months = future.Month - now.Month;
if (months < 0)
{
    years--;
    months += 12;
}
int days = future.Day + DateTime.DaysInMonth(now.Year, now.Month) - now.Day;
于 2014-04-01T20:29:51.050 に答える