1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.bitrepository.common.utils;
26
27 import java.util.Date;
28 import java.util.GregorianCalendar;
29
30 import javax.xml.datatype.DatatypeFactory;
31 import javax.xml.datatype.XMLGregorianCalendar;
32
33 import org.bitrepository.common.ArgumentValidator;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37
38
39
40 public final class CalendarUtils {
41
42 private static Logger log = LoggerFactory.getLogger(CalendarUtils.class);
43
44
45
46
47 private CalendarUtils() { }
48
49
50
51
52
53
54 public static XMLGregorianCalendar getXmlGregorianCalendar(Date date) {
55 if(date == null) {
56 log.debug("Cannot convert the date '" + date + "'. Returning epoch instead.");
57 date = new Date(0);
58 }
59
60 GregorianCalendar gc = new GregorianCalendar();
61 try {
62 gc.setTime(date);
63 return DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
64 } catch (Exception e) {
65 throw new IllegalStateException("Could not convert the date '" + date + "' into the xml format.", e);
66 }
67 }
68
69
70
71
72
73 public static XMLGregorianCalendar getXmlGregorianCalendar(GregorianCalendar gregorianCalendar) {
74 try {
75 return DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);
76 } catch (Exception e) {
77 throw new IllegalStateException("Could not convert the date '" + gregorianCalendar + "' into the xml format.", e);
78 }
79 }
80
81
82
83
84
85 public static XMLGregorianCalendar getNow() {
86 return getXmlGregorianCalendar(new Date());
87 }
88
89
90
91
92
93 public static XMLGregorianCalendar getEpoch() {
94 return getXmlGregorianCalendar(new Date(0));
95 }
96
97
98
99
100
101
102 public static XMLGregorianCalendar getFromMillis(long millis) {
103 return getXmlGregorianCalendar(new Date(millis));
104 }
105
106
107
108
109
110
111
112 public static Date convertFromXMLGregorianCalendar(XMLGregorianCalendar xmlCal) {
113 ArgumentValidator.checkNotNull(xmlCal, "XMLGregorianCalendar xmlCal");
114
115 return xmlCal.toGregorianCalendar().getTime();
116 }
117 }