/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hive.hplsql; import java.sql.Date; import java.sql.Timestamp; import java.util.Calendar; /** * Date and time interval */ public class Interval { int days = 0; int milliseconds = 0; /** * Add or subtract interval value to the specified date */ public Date dateChange(Date in, boolean add) { Calendar c = Calendar.getInstance(); c.setTimeInMillis(in.getTime()); calendarChange(c, add); return new Date(c.getTimeInMillis()); } /** * Add or subtract interval value to the specified timestamp */ public Timestamp timestampChange(Timestamp in, boolean add) { Calendar c = Calendar.getInstance(); c.setTimeInMillis(in.getTime()); calendarChange(c, add); return new Timestamp(c.getTimeInMillis()); } /** * Add interval value to the specified Calendar value */ public Calendar calendarChange(Calendar c, boolean add) { int a = 1; if (!add) { a = -1; } if (days != 0) { c.add(Calendar.DAY_OF_MONTH, days * a); } if (milliseconds != 0) { c.setTimeInMillis(c.getTimeInMillis() + milliseconds * a); } return c; } /** * Set interval value */ public Interval set(int value, String item) { if (item.compareToIgnoreCase("DAYS") == 0 || item.compareToIgnoreCase("DAY") == 0) { setDays(value); } if (item.compareToIgnoreCase("MICROSECONDS") == 0 || item.compareToIgnoreCase("MICROSECOND") == 0) { setMilliseconds(value); } return this; } /** * Set interval items */ public void setDays(int days) { this.days = days; } public void setMilliseconds(int milliseconds) { this.milliseconds = milliseconds; } /** * Convert interval to string */ @Override public String toString() { StringBuilder s = new StringBuilder(); if (days != 0) { s.append(days); s.append(" days"); } if (milliseconds != 0) { s.append(milliseconds); s.append(" milliseconds"); } return s.toString(); } }