FileDocCategorySizeDatePackage
Time.javaAPI DocApache Axis 1.48223Sat Apr 22 18:57:28 BST 2006org.apache.axis.types

Time

public class Time extends Object implements Serializable
Class that represents the xsd:time XML Schema type

Fields Summary
private Calendar
_value
private static SimpleDateFormat
zulu
a shared java.text.SimpleDateFormat instance used for parsing the basic component of the timestamp
Constructors Summary
public Time(Calendar value)
Initialize with a Calender, year month and date are ignored


    // We should always format dates in the GMT timezone
     
        zulu.setTimeZone(TimeZone.getTimeZone("GMT"));
    
        this._value = value;
        _value.set(0,0,0);      // ignore year, month, date
    
public Time(String value)
Converts a string formatted as HH:mm:ss[.SSS][+/-offset]

        _value = makeValue(value);
    
Methods Summary
private static java.util.DateParseHoursMinutesSeconds(java.lang.String source)
parse the hours, minutes and seconds of a string, by handing it off to the java runtime. The relevant code will return null if a null string is passed in, so this code may return a null date in response

param
source
return
throws
NumberFormatException in the event of trouble

        Date date;
        try {
            synchronized (zulu) {
                String fulltime = source == null ? null :
                                                    (source.substring(0,8)+".000Z");
                date = zulu.parse(fulltime);
            }
        } catch (Exception e) {
            throw new NumberFormatException(e.toString());
        }
        return date;
    
public booleanequals(java.lang.Object obj)

        if (obj == null) return false;
        if (!(obj instanceof Time)) return false;
        Time other = (Time) obj;
        if (this == obj) return true;

        boolean _equals;
        _equals = true &&
            ((_value ==null && other._value ==null) ||
             (_value !=null &&
              _value.getTime().equals(other._value.getTime())));

        return _equals;

    
public java.util.CalendargetAsCalendar()
return the time as a calendar: ignore the year, month and date fields

return
calendar value; may be null

        return _value;
    
private intgetTimezoneNumberValue(char c)

        int n=c-'0";
        if(n<0 || n>9) {
            //oops, out of range
            throw new NumberFormatException(
                    Messages.getMessage("badTimezone00"));
        }
        return n;
    
public inthashCode()
Returns the hashcode of the underlying calendar.

return
an int value

        return _value == null ? 0 : _value.hashCode();
    
private java.util.CalendarmakeValue(java.lang.String source)
Utility function that parses xsd:time strings and returns a Date object

        Calendar calendar = Calendar.getInstance();
        Date date;

        validateSource(source);

        // convert what we have validated so far
        date = ParseHoursMinutesSeconds(source);

        int pos = 8;    // The "." in hh:mm:ss.sss

        // parse optional milliseconds
        if ( source != null ) {
            if (pos < source.length() && source.charAt(pos)=='.") {
                int milliseconds = 0;
                int start = ++pos;
                while (pos<source.length() &&
                       Character.isDigit(source.charAt(pos))) {
                    pos++;
                }


                String decimal=source.substring(start,pos);
                if (decimal.length()==3) {
                    milliseconds=Integer.parseInt(decimal);
                } else if (decimal.length() < 3) {
                    milliseconds=Integer.parseInt((decimal+"000")
                                                  .substring(0,3));
                } else {
                    milliseconds=Integer.parseInt(decimal.substring(0,3));
                    if (decimal.charAt(3)>='5") {
                        ++milliseconds;
                    }
                }

                // add milliseconds to the current date
                date.setTime(date.getTime()+milliseconds);
            }

            // parse optional timezone
            if (pos+5 < source.length() &&
                (source.charAt(pos)=='+" || (source.charAt(pos)=='-"))) {
                    if (!Character.isDigit(source.charAt(pos+1)) ||
                        !Character.isDigit(source.charAt(pos+2)) ||
                        source.charAt(pos+3) != ':"              ||
                        !Character.isDigit(source.charAt(pos+4)) ||
                        !Character.isDigit(source.charAt(pos+5)))
                    {
                        throw new NumberFormatException(
                                Messages.getMessage("badTimezone00"));
                    }

                    int hours = (source.charAt(pos+1)-'0")*10
                        +source.charAt(pos+2)-'0";
                    int mins  = (source.charAt(pos+4)-'0")*10
                        +source.charAt(pos+5)-'0";
                    int milliseconds = (hours*60+mins)*60*1000;

                    // subtract milliseconds from current date to obtain GMT
                    if (source.charAt(pos)=='+") {
                        milliseconds=-milliseconds;
                    }
                    date.setTime(date.getTime()+milliseconds);
                    pos+=6;
            }

            if (pos < source.length() && source.charAt(pos)=='Z") {
                pos++;
                calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
            }

            if (pos < source.length()) {
                throw new NumberFormatException(
                        Messages.getMessage("badChars00"));
            }
        }

        calendar.setTime(date);
        calendar.set(0,0,0);    // ignore year, month, date

        return calendar;
    
public voidsetTime(java.util.Calendar date)
set the time; ignore year, month, date

param
date

        this._value = date;
        _value.set(0,0,0);      // ignore year, month, date
    
public voidsetTime(java.util.Date date)
set the time from a date instance

param
date

        _value.setTime(date);
        _value.set(0,0,0);      // ignore year, month, date
    
public java.lang.StringtoString()
stringify method returns the time as it would be in GMT, only accurate to the second...millis probably get lost.

return

        if(_value==null) {
            return "unassigned Time";
        }
        synchronized (zulu) {
            return zulu.format(_value.getTime());
        }

    
private voidvalidateSource(java.lang.String source)
validate the source

param
source

        // validate fixed portion of format
        if ( source != null ) {
            if (source.charAt(2) != ':" || source.charAt(5) != ':") {
                throw new NumberFormatException(
                        Messages.getMessage("badTime00"));
            }
            if (source.length() < 8) {
                throw new NumberFormatException(
                        Messages.getMessage("badTime00"));
            }
        }