From f8029942d414726643846091177d7ff5b193f507 Mon Sep 17 00:00:00 2001 From: Stephanie Anderl <46726333+sanderl@users.noreply.github.com> Date: Fri, 8 Feb 2019 12:30:16 -0800 Subject: [PATCH] Updated the AdjustCalendarDate() to account for the transition year quirk in the Japanese calendar. --- src/CalcViewModel/Common/DateCalculator.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/CalcViewModel/Common/DateCalculator.cpp b/src/CalcViewModel/Common/DateCalculator.cpp index 6b7eba88..22cd4ff5 100644 --- a/src/CalcViewModel/Common/DateCalculator.cpp +++ b/src/CalcViewModel/Common/DateCalculator.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. #include "pch.h" @@ -273,12 +273,24 @@ bool DateCalculationEngine::TryGetCalendarDaysInYear(_In_ DateTime date, _Out_ U // Adds/Subtracts certain value for a particular date unit DateTime DateCalculationEngine::AdjustCalendarDate(Windows::Foundation::DateTime date, DateUnit dateUnit, int difference) { + auto currentCalendarSystem = m_calendar->GetCalendarSystem(); + m_calendar->SetDateTime(date); switch (dateUnit) { case DateUnit::Year: + // In the Japanese calendar, transition years have 2 partial years. + // It is not guaranteed that adding 1 year will always add 365 days in the Japanese Calendar. + // To work around this quirk, we will change the calendar system to Gregorian before adding 1 year in the Japanese Calendar case only. + // We will then return the calendar system back to the Japanese Calendar. + if (currentCalendarSystem == L"JapaneseCalendar") + { + m_calendar->ChangeCalendarSystem(L"GregorianCalendar"); + } + m_calendar->AddYears(difference); + m_calendar->ChangeCalendarSystem(currentCalendarSystem); break; case DateUnit::Month: m_calendar->AddMonths(difference);