org.postgresql.util.PGTimestamp Maven / Gradle / Ivy
Show all versions of postgresql Show documentation
/*-------------------------------------------------------------------------
*
* Copyright (c) 2004-2014, PostgreSQL Global Development Group
*
*
*-------------------------------------------------------------------------
*/
package org.postgresql.util;
import java.sql.PreparedStatement;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.TimeZone;
/**
* This class augments the Java built-in Timestamp to allow for explicit setting
* of the time zone.
*/
public class PGTimestamp extends Timestamp
{
/** The serial version UID. */
private static final long serialVersionUID = -6245623465210738466L;
/** The optional calendar for this timestamp. */
private Calendar calendar;
/**
* Constructs a PGTimestamp
without a time zone. The integral
* seconds are stored in the underlying date value; the fractional seconds
* are stored in the nanos
field of the Timestamp
* object.
*
* @param time
* milliseconds since January 1, 1970, 00:00:00 GMT. A negative
* number is the number of milliseconds before January 1, 1970,
* 00:00:00 GMT.
* @see Timestamp#Timestamp(long)
*/
public PGTimestamp(long time)
{
this(time, null);
}
/**
* Constructs a PGTimestamp
with the given time zone. The
* integral seconds are stored in the underlying date value; the fractional
* seconds are stored in the nanos
field of the
* Timestamp
object.
*
* The calendar object is optional. If absent, the driver will treat the
* timestamp as timestamp without time zone
. When present, the
* driver will treat the timestamp as a timestamp with time zone
* using the TimeZone
in the calendar object. Furthermore, this
* calendar will be used instead of the calendar object passed to
* {@link PreparedStatement#setTimestamp(int, Timestamp, Calendar)}.
*
* @param time
* milliseconds since January 1, 1970, 00:00:00 GMT. A negative
* number is the number of milliseconds before January 1, 1970,
* 00:00:00 GMT.
* @param calendar
* the calendar object containing the time zone or
* null
.
* @see Timestamp#Timestamp(long)
*/
public PGTimestamp(long time, Calendar calendar)
{
super(time);
this.setCalendar(calendar);
}
/**
* Sets the calendar object for this timestamp.
*
* @param calendar
* the calendar object or null
.
*/
public void setCalendar(Calendar calendar)
{
this.calendar = calendar;
}
/**
* Returns the calendar object for this timestamp.
*
* @return the calendar object or null
.
*/
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 PGTimestamp))
return false;
PGTimestamp other = (PGTimestamp) obj;
if (calendar == null)
{
if (other.calendar != null)
return false;
}
else if (!calendar.equals(other.calendar))
return false;
return true;
}
@Override
public Object clone()
{
PGTimestamp clone = (PGTimestamp)super.clone();
if (getCalendar() != null)
{
clone.setCalendar((Calendar)getCalendar().clone());
}
return clone;
}
}