1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License.  You may obtain a copy of the License at
8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.sql;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
23f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Java representation of an SQL {@code TIME} value. Provides utilities to
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format and parse the time's representation as a String in JDBC escape format.
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Time extends Date {
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final long serialVersionUID = 8397324403548013681L;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a {@code Time} object using the supplied values for <i>Hour</i>,
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <i>Minute</i> and <i>Second</i>. The <i>Year</i>, <i>Month</i> and
33142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson     * <i>Day</i> elements of the {@code Time} object are set to the date
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of the Epoch (January 1, 1970).
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Any attempt to access the <i>Year</i>, <i>Month</i> or <i>Day</i>
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * elements of a {@code Time} object will result in an {@code
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * IllegalArgumentException}.
39142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson     * <p>
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The result is undefined if any argument is out of bounds.
41142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson     *
4299b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     * @deprecated Use the constructor {@link #Time(long)} instead.
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param theHour
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a value in the range {@code [0,23]}.
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param theMinute
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a value in the range {@code [0,59]}.
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param theSecond
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a value in the range {@code [0,59]}.
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Time(int theHour, int theMinute, int theSecond) {
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(70, 0, 1, theHour, theMinute, theSecond);
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a {@code Time} object using a supplied time specified in
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * milliseconds.
59f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param theTime
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a {@code Time} specified in milliseconds since the
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            <i>Epoch</i> (January 1st 1970, 00:00:00.000).
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Time(long theTime) {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(theTime);
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @deprecated This method is deprecated and must not be used. An SQL
7099b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     *             {@code Time} object does not have a date component.
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return does not return anything.
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this method is called.
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getDate() {
79cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        throw new IllegalArgumentException("unimplemented");
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @deprecated This method is deprecated and must not be used. An SQL
8499b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     *             {@code Time} object does not have a day component.
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return does not return anything.
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this method is called.
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getDay() {
93cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        throw new IllegalArgumentException("unimplemented");
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @deprecated This method is deprecated and must not be used. An SQL
9899b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     *             {@code Time} object does not have a month component.
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return does not return anything.
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this method is called.
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getMonth() {
107cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        throw new IllegalArgumentException("unimplemented");
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @deprecated This method is deprecated and must not be used. An SQL
11299b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     *             {@code Time} object does not have a year component.
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return does not return anything.
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this method is called.
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getYear() {
121cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        throw new IllegalArgumentException("unimplemented");
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @deprecated This method is deprecated and must not be used. An SQL
12699b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     *             {@code Time} object does not have a date component.
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this method is called.
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setDate(int i) {
134cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        throw new IllegalArgumentException("unimplemented");
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @deprecated This method is deprecated and must not be used. An SQL
13999b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     *             {@code Time} object does not have a month component.
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this method is called.
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setMonth(int i) {
147cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        throw new IllegalArgumentException("unimplemented");
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @deprecated This method is deprecated and must not be used. An SQL
15299b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes     *             {@code Time} object does not have a year component.
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this method is called.
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setYear(int i) {
160cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        throw new IllegalArgumentException("unimplemented");
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the time for this {@code Time} object to the supplied milliseconds
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * value.
166f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param time
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A time value expressed as milliseconds since the <i>Epoch</i>.
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            Negative values are milliseconds before the Epoch. The Epoch
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            is January 1 1970, 00:00:00.000.
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setTime(long time) {
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setTime(time);
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Formats the {@code Time} as a String in JDBC escape format: {@code
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * hh:mm:ss}.
180f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return A String representing the {@code Time} value in JDBC escape
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         format: {@code HH:mm:ss}
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString() {
186142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        StringBuilder sb = new StringBuilder(8);
187142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson
188142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        format(getHours(), 2, sb);
189142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        sb.append(':');
190142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        format(getMinutes(), 2, sb);
191142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        sb.append(':');
192142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        format(getSeconds(), 2, sb);
193142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson
194142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        return sb.toString();
195142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson    }
196142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson
197f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    private static final String PADDING = "00";
198142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson
199f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    /*
200f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    * Private method to format the time
201f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    */
202f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    private void format(int date, int digits, StringBuilder sb) {
203142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        String str = String.valueOf(date);
204142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        if (digits - str.length() > 0) {
205142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson            sb.append(PADDING.substring(0, digits - str.length()));
206142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        }
207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        sb.append(str);
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a {@code Time} object from a string holding a time represented in
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * JDBC escape format: {@code hh:mm:ss}.
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * An exception occurs if the input string does not comply with this format.
215142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson     *
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param timeString
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            A String representing the time value in JDBC escape format:
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code hh:mm:ss}.
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return The {@code Time} object set to a time corresponding to the given
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         time.
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the supplied time string is not in JDBC escape format.
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Time valueOf(String timeString) {
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (timeString == null) {
226cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes            throw new IllegalArgumentException("timeString == null");
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int firstIndex = timeString.indexOf(':');
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int secondIndex = timeString.indexOf(':', firstIndex + 1);
230142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        // secondIndex == -1 means none or only one separator '-' has been
231142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        // found.
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // The string is separated into three parts by two separator characters,
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // if the first or the third part is null string, we should throw
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // IllegalArgumentException to follow RI
235142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        if (secondIndex == -1 || firstIndex == 0
236142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson                || secondIndex + 1 == timeString.length()) {
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException();
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // parse each part of the string
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int hour = Integer.parseInt(timeString.substring(0, firstIndex));
241142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        int minute = Integer.parseInt(timeString.substring(firstIndex + 1,
242142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson                secondIndex));
243142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson        int second = Integer.parseInt(timeString.substring(secondIndex + 1,
244142d526f8bf90fb9bb63c637beb5299f39791f55Jesse Wilson                timeString.length()));
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new Time(hour, minute, second);
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
248