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