DateTime operator+ (const DateTime& first, const YearMonthDuration& second) { int year = first.Year(); int month = first.Month() - 1; int day = first.Day(); month += second.Months(); int monthrem = month % 12; if (monthrem < 0) { monthrem += 12; } year += second.Years() + (month - monthrem) / 12; month = monthrem; if (DateTime::IsLeapYear(year)) { if (day > (int) monthStartLeap[month + 1] - (int) monthStartLeap[month]) day = (int) monthStartLeap[month + 1] - (int) monthStartLeap[month]; } else { if (day > (int) monthStart[month + 1] - (int) monthStart[month]) day = (int) monthStart[month + 1] - (int) monthStart[month]; } return DateTime(year, month + 1, day, first.Hour(), first.Minute(), first.Second(), first.Timezone()); }
DateTime operator- (const DateTime& first, const DayTimeDuration& second) { return DateTime(first.Value() - second.Value(), first.Timezone()); }