/************************************************************************* /* 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