@Override public Datum plus(Datum datum) { switch (datum.kind()) { case INTERVAL: IntervalDatum interval = (IntervalDatum) datum; TimeMeta tm = asTimeMeta(); tm.plusInterval(interval.months, interval.milliseconds); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm)); case TIME: TimeMeta tm1 = asTimeMeta(); TimeMeta tm2 = datum.asTimeMeta(); tm1.plusTime(DateTimeUtil.toTime(tm2)); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1)); default: throw new InvalidOperationException("operator does not exist: " + type() + " + " + datum.type()); } }
@Override public Datum plus(Datum datum) { switch (datum.type()) { case INTERVAL: IntervalDatum interval = (IntervalDatum) datum; TimeMeta tm = asTimeMeta(); tm.plusInterval(interval.months, interval.milliseconds); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm)); case TIME: TimeMeta tm1 = asTimeMeta(); TimeMeta tm2 = datum.asTimeMeta(); tm1.plusTime(DateTimeUtil.toTime(tm2)); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1)); default: throw new InvalidOperationException("operator does not exist: " + type() + " + " + datum.type()); } }
@Override public Datum minus(Datum datum) { switch (datum.kind()) { case INTERVAL: IntervalDatum interval = (IntervalDatum) datum; TimeMeta tm = asTimeMeta(); tm.plusInterval(-interval.months, -interval.milliseconds); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm)); case TIMESTAMP: return new IntervalDatum((timestamp - ((TimestampDatum) datum).timestamp) / 1000); case TIME: TimeMeta tm1 = asTimeMeta(); TimeMeta tm2 = datum.asTimeMeta(); tm1.plusTime(0 - DateTimeUtil.toTime(tm2)); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1)); default: throw new InvalidOperationException("operator does not exist: " + type() + " - " + datum.type()); } }
@Override public Datum minus(Datum datum) { switch (datum.type()) { case INTERVAL: IntervalDatum interval = (IntervalDatum) datum; TimeMeta tm = asTimeMeta(); tm.plusInterval(-interval.months, -interval.milliseconds); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm)); case TIMESTAMP: return new IntervalDatum((timestamp - ((TimestampDatum) datum).timestamp) / 1000); case TIME: TimeMeta tm1 = asTimeMeta(); TimeMeta tm2 = datum.asTimeMeta(); tm1.plusTime(0 - DateTimeUtil.toTime(tm2)); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1)); default: throw new InvalidOperationException("operator does not exist: " + type() + " - " + datum.type()); } }