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