• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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