/* * Copyright (c) 2004, PostgreSQL Global Development Group * See the LICENSE file in the project root for more information. */ package org.postgresql.util; import java.sql.PreparedStatement; import java.sql.Time; import java.util.Calendar; /** * This class augments the Java built-in Time to allow for explicit setting of the time zone. */ public class PGTime extends Time { /** * The serial version UID. */ private static final long serialVersionUID = 3592492258676494276L; /** * The optional calendar for this time. */ private Calendar calendar; /** * Constructs a <code>PGTime</code> without a time zone. * * @param time milliseconds since January 1, 1970, 00:00:00 GMT; a negative number is milliseconds * before January 1, 1970, 00:00:00 GMT. * @see Time#Time(long) */ public PGTime(long time) { this(time, null); } /** * Constructs a <code>PGTime</code> with the given calendar object. The calendar object is * optional. If absent, the driver will treat the time as <code>time without time zone</code>. * When present, the driver will treat the time as a <code>time with time zone</code> using the * <code>TimeZone</code> in the calendar object. Furthermore, this calendar will be used instead * of the calendar object passed to {@link PreparedStatement#setTime(int, Time, Calendar)}. * * @param time milliseconds since January 1, 1970, 00:00:00 GMT; a negative number is milliseconds * before January 1, 1970, 00:00:00 GMT. * @param calendar the calendar object containing the time zone or <code>null</code>. * @see Time#Time(long) */ public PGTime(long time, Calendar calendar) { super(time); this.setCalendar(calendar); } /** * Sets the calendar object for this time. * * @param calendar the calendar object or <code>null</code>. */ public void setCalendar(Calendar calendar) { this.calendar = calendar; } /** * Returns the calendar object for this time. * * @return the calendar or <code>null</code>. */ public Calendar getCalendar() { return calendar; } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((calendar == null) ? 0 : calendar.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (!(obj instanceof PGTime)) { return false; } PGTime other = (PGTime) obj; if (calendar == null) { if (other.calendar != null) { return false; } } else if (!calendar.equals(other.calendar)) { return false; } return true; } @Override public Object clone() { PGTime clone = (PGTime) super.clone(); if (getCalendar() != null) { clone.setCalendar((Calendar) getCalendar().clone()); } return clone; } }