/*************************************************************************
/* Time.java -- Wrapper around java.util.Date
/*
/* Copyright (c) 1999 Free Software Foundation, Inc.
/* Written by Aaron M. Renn (arenn@urbanophile.com)
/*
/* This library is free software; you can redistribute it and/or modify
/* it under the terms of the GNU Library General Public License as published
/* by the Free Software Foundation, either version 2 of the License, or
/* (at your option) any later verion.
/*
/* This library is distributed in the hope that it will be useful, but
/* WITHOUT ANY WARRANTY; without even the implied warranty of
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/* GNU Library General Public License for more details.
/*
/* You should have received a copy of the GNU Library General Public License
/* along with this library; if not, write to the Free Software Foundation
/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
/*************************************************************************/
package java.sql;
import java.text.SimpleDateFormat;
/**
* This class is a wrapper around java.util.Date to allow the JDBC
* driver to identify the value as a SQL Timestamp. Note that this
* class also adds an additional field for nano-seconds, and so
* is not completely identical to java.util.Date as
* the java.sql.Date and java.sql.Time
* classes are.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class Timestamp extends java.util.Date
{
/*
* Class Variables
*/
/**
* Used for parsing and formatting this date.
*/
// Millisecond will have to be close enough for now.
private static SimpleDateFormat parse_sdf =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
private static SimpleDateFormat format_sdf =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/*************************************************************************/
/*
* Instance Variables
*/
/**
* @serial The nanosecond value for this object
*/
private int nanos;
/*************************************************************************/
/*
* Class Methods
*/
/**
* This method returns a new instance of this class by parsing a
* date in JDBC format into a Java date.
*
* @param str The string to parse.
*
* @return The resulting java.sql.Timestamp value.
*/
public static Timestamp
valueOf(String str)
{
try
{
Date d = (Date)parse_sdf.parseObject(str);
return(new Timestamp(d.getTime()));
}
catch(Exception e)
{
return(null);
}
}
/*************************************************************************/
/*
* Constructors
*/
/**
* This method initializes a new instance of this class with the
* specified year, month, and day.
*
* @param year The year for this Timestamp (year - 1900)
* @param month The month for this Timestamp (0-11)
* @param day The day for this Timestamp (1-31)
* @param hour The hour for this Timestamp (0-23)
* @param minute The minute for this Timestamp (0-59)
* @param second The second for this Timestamp (0-59)
* @param nanos The nanosecond value for this Timestamp (0 to 999,999,9999)
*
* @deprecated
*/
public
Timestamp(int year, int month, int day, int hour, int minute, int second,
int nanos)
{
super(year, month, day, hour, minute, second);
this.nanos = nanos;
}
/*************************************************************************/
/**
* This method initializes a new instance of this class with the
* specified time value representing the number of seconds since
* Jan 1, 1970 at 12:00 midnight GMT.
*
* @param time The time value to intialize this Time to.
*/
public
Timestamp(long date)
{
super(date);
}
/*************************************************************************/
/*
* Instance Methods
*/
/**
* This method returns this date in JDBC format.
*
* @return This date as a string.
*/
public String
toString()
{
return(format_sdf.format(this) + "." + getNanos());
}
/*************************************************************************/
/**
* This method returns the nanosecond value for this object.
*
* @return The nanosecond value for this object.
*/
public int
getNanos()
{
return(nanos);
}
/*************************************************************************/
/**
* This method sets the nanosecond value for this object.
*
* @param nanos The nanosecond value for this object.
*/
public void
setNanos(int nanos)
{
this.nanos = nanos;
}
/*************************************************************************/
/**
* This methods tests whether this object is earlier than the specified
* object.
*
* @param ts The other Timestamp to test against.
*
* @return true if this object is earlier than the other object,
* false otherwise.
*/
public boolean
before(Timestamp ts)
{
if (ts.getTime() > getTime())
return(true);
if (ts.getNanos() > getNanos())
return(true);
return(false);
}
/*************************************************************************/
/**
* This methods tests whether this object is later than the specified
* object.
*
* @param ts The other Timestamp to test against.
*
* @return true if this object is later than the other object,
* false otherwise.
*/
public boolean
after(Timestamp ts)
{
if (ts.getTime() < getTime())
return(true);
if (ts.getNanos() < getNanos())
return(true);
return(false);
}
/*************************************************************************/
/**
* This method these the specified Object for equality
* against this object. This will be true if an only if the specified
* object is an instance of Timestamp and has the same
* time value fields.
*
* @param obj The object to test against for equality.
*
* @return true if the specified object is equal to this
* object, false otherwise.
*/
public boolean
equals(Object obj)
{
if (obj == null)
return(false);
if (!(obj instanceof Timestamp))
return(false);
return(equals((Timestamp)obj));
}
/*************************************************************************/
/**
* This method tests the specified timestamp for equality against this
* object. This will be true if and only if the specified object is
* not null and contains all the same time value fields
* as this object.
*
* @param ts The Timestamp to test against for equality.
*
* @return true if the specified object is equal to this
* object, false otherwise.
*/
public boolean
equals(Timestamp ts)
{
if (ts == null)
return(false);
if (ts.getTime() != getTime())
return(false);
if (ts.getNanos() != getNanos())
return(false);
return(true);
}
} // class Timestamp