public Proxy(DateValue value) { _value = value; }
public static DateValue Add(DateValue dat, DayTimeDurationValue duration) { try { decimal seconds = (decimal)duration.LowPartValue.Ticks / TimeSpan.TicksPerSecond; decimal julian = dat.ToJulianInstant(); julian += seconds; DateTimeValue dt = DateTimeValue.CreateFromJulianInstant(julian); if (dat.IsLocal) return new DateValue(dt.S, dt.Value.Date); else return new DateValue(dt.S, new DateTimeOffset(dt.Value.Date, dat.Value.Offset)); } catch (ArgumentOutOfRangeException) { throw new XQueryException(Properties.Resources.FODT0001); } }
private static DayTimeDurationValue Sub(DateValue dat1, DateValue dat2) { try { TimeSpan ts1; TimeSpan ts2; if (dat1.IsLocal && dat2.IsLocal) { ts1 = dat1.Value.DateTime - DateTime.MinValue; ts2 = dat2.Value.DateTime - DateTime.MinValue; } else { ts1 = dat1.Value.ToUniversalTime().DateTime - DateTime.MinValue; ts2 = dat2.Value.ToUniversalTime().DateTime - DateTime.MinValue; } if (dat1.S) ts1 = -ts1; if (dat2.S) ts2 = -ts2; return new DayTimeDurationValue(ts1 - ts2); } catch (OverflowException) { throw new XQueryException(Properties.Resources.FODT0001); } }
public static DateValue Add(DateValue dat, YearMonthDurationValue duration) { try { Calendar calender = CultureInfo.InvariantCulture.Calendar; DateTime dt = dat.Value.DateTime; int year = dat.S ? -dt.Year : dt.Year - 1; int m = (dt.Month - 1) + duration.Months; year = year + duration.Years + m / 12; if (year >= 0) year = year + 1; m = m % 12; if (m < 0) { m += 12; year -= 1; } m++; int day = Math.Min(dt.Day, calender.GetDaysInMonth(Math.Abs(year), m)); if (year < 0) dt = new DateTime(-year, m, day); else dt = new DateTime(year, m, day); if (dat.IsLocal) return new DateValue(year < 0, dt); else return new DateValue(year < 0, new DateTimeOffset(dt, dat.Value.Offset)); } catch (ArgumentOutOfRangeException) { throw new XQueryException(Properties.Resources.FODT0001); } }