1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/* Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany 2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 3997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Permission is hereby granted, free of charge, to any person obtaining a copy 4997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * of this software and associated documentation files (the "Software"), to deal 5997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * in the Software without restriction, including without limitation the rights 6997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * to use, copy, modify, merge, publish, distribute, sublicense, and/or 7997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * sell copies of the Software, and to permit persons to whom the Software is 8997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * furnished to do so, subject to the following conditions: 9997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 10997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The above copyright notice and this permission notice shall be included in 11997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * all copies or substantial portions of the Software. 12997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 13997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IN THE SOFTWARE. */ 20997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 21997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupackage org.ksoap2.kobjects.isodate; 22997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.util.*; 24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupublic class IsoDate { 26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final int DATE = 1; 28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final int TIME = 2; 29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final int DATE_TIME = 3; 30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu static void dd(StringBuffer buf, int i) { 32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append((char) (((int) '0') + i / 10)); 33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append((char) (((int) '0') + i % 10)); 34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static String dateToString(Date date, int type) { 37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Calendar c = Calendar.getInstance(); 39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.setTimeZone(TimeZone.getTimeZone("GMT")); 40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.setTime(date); 41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu StringBuffer buf = new StringBuffer(); 43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if ((type & DATE) != 0) { 45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu int year = c.get(Calendar.YEAR); 46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu dd(buf, year / 100); 47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu dd(buf, year % 100); 48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append('-'); 49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu dd( 50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf, 51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.get(Calendar.MONTH) - Calendar.JANUARY + 1); 52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append('-'); 53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu dd(buf, c.get(Calendar.DAY_OF_MONTH)); 54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (type == DATE_TIME) 56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append("T"); 57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 59997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if ((type & TIME) != 0) { 60997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu dd(buf, c.get(Calendar.HOUR_OF_DAY)); 61997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append(':'); 62997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu dd(buf, c.get(Calendar.MINUTE)); 63997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append(':'); 64997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu dd(buf, c.get(Calendar.SECOND)); 65997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append('.'); 66997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu int ms = c.get(Calendar.MILLISECOND); 67997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append((char) (((int) '0') + (ms / 100))); 68997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu dd(buf, ms % 100); 69997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf.append('Z'); 70997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 71997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 72997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return buf.toString(); 73997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 74997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 75997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static Date stringToDate(String text, int type) { 76997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 77997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Calendar c = Calendar.getInstance(); 78997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 79997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if ((type & DATE) != 0) { 80997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set( 81997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Calendar.YEAR, 82997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Integer.parseInt(text.substring(0, 4))); 83997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set( 84997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Calendar.MONTH, 85997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Integer.parseInt(text.substring(5, 7)) 86997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu - 1 87997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu + Calendar.JANUARY); 88997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set( 89997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Calendar.DAY_OF_MONTH, 90997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Integer.parseInt(text.substring(8, 10))); 91997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 92997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (type != DATE_TIME || text.length() < 11) { 93997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set(Calendar.HOUR_OF_DAY, 0); 94997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set(Calendar.MINUTE, 0); 95997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set(Calendar.SECOND, 0); 96997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set(Calendar.MILLISECOND, 0); 97997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return c.getTime(); 98997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 99997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu text = text.substring(11); 100997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 101997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu else 102997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.setTime(new Date(0)); 103997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 104997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set( 105997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Calendar.HOUR_OF_DAY, 106997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Integer.parseInt(text.substring(0, 2))); 107997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // -11 108997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set( 109997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Calendar.MINUTE, 110997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Integer.parseInt(text.substring(3, 5))); 111997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set( 112997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Calendar.SECOND, 113997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Integer.parseInt(text.substring(6, 8))); 114997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 115997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu int pos = 8; 116997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (pos < text.length() && text.charAt(pos) == '.') { 117997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu int ms = 0; 118997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu int f = 100; 119997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu while (true) { 120997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu char d = text.charAt(++pos); 121997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (d < '0' || d > '9') 122997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu break; 123997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu ms += (d - '0') * f; 124997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu f /= 10; 125997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 126997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set(Calendar.MILLISECOND, ms); 127997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 128997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu else 129997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.set(Calendar.MILLISECOND, 0); 130997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 131997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (pos < text.length()) { 132997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 133997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (text.charAt(pos) == '+' 134997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu || text.charAt(pos) == '-') 135997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.setTimeZone( 136997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu TimeZone.getTimeZone( 137997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu "GMT" + text.substring(pos))); 138997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 139997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu else if (text.charAt(pos) == 'Z') 140997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu c.setTimeZone(TimeZone.getTimeZone("GMT")); 141997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu else 142997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu throw new RuntimeException("illegal time format!"); 143997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 144997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 145997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return c.getTime(); 146997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 147997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu} 148