1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org) 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.xbill.DNS; 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Routines for converting time values to and from YYYYMMDDHHMMSS format. 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Brian Wellington 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.*; 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.text.*; 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenfinal class FormattedTime { 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate static NumberFormat w2, w4; 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenstatic { 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen w2 = new DecimalFormat(); 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen w2.setMinimumIntegerDigits(2); 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen w4 = new DecimalFormat(); 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen w4.setMinimumIntegerDigits(4); 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen w4.setGroupingUsed(false); 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenFormattedTime() {} 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Converts a Date into a formatted string. 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param date The Date to convert. 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return The formatted string. 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static String 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenformat(Date date) { 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Calendar c = new GregorianCalendar(TimeZone.getTimeZone("UTC")); 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen StringBuffer sb = new StringBuffer(); 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen c.setTime(date); 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(w4.format(c.get(Calendar.YEAR))); 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(w2.format(c.get(Calendar.MONTH)+1)); 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(w2.format(c.get(Calendar.DAY_OF_MONTH))); 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(w2.format(c.get(Calendar.HOUR_OF_DAY))); 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(w2.format(c.get(Calendar.MINUTE))); 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(w2.format(c.get(Calendar.SECOND))); 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return sb.toString(); 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a formatted time string into a Date. 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param s The string, in the form YYYYMMDDHHMMSS. 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return The Date object. 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws TextParseExcetption The string was invalid. 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static Date 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenparse(String s) throws TextParseException { 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (s.length() != 14) { 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen throw new TextParseException("Invalid time encoding: " + s); 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Calendar c = new GregorianCalendar(TimeZone.getTimeZone("UTC")); 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen c.clear(); 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen try { 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen int year = Integer.parseInt(s.substring(0, 4)); 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen int month = Integer.parseInt(s.substring(4, 6)) - 1; 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen int date = Integer.parseInt(s.substring(6, 8)); 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen int hour = Integer.parseInt(s.substring(8, 10)); 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen int minute = Integer.parseInt(s.substring(10, 12)); 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen int second = Integer.parseInt(s.substring(12, 14)); 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen c.set(year, month, date, hour, minute, second); 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen catch (NumberFormatException e) { 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen throw new TextParseException("Invalid time encoding: " + s); 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return c.getTime(); 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 80