1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.kerberos.shared.messages.value;
21
22
23 import java.text.ParseException;
24 import java.text.SimpleDateFormat;
25 import java.util.Date;
26 import java.util.TimeZone;
27
28
29
30
31
32
33
34
35 public class KerberosTime implements Comparable<KerberosTime>
36 {
37
38 public static final int MINUTE = 60000;
39
40
41 public static final int DAY = MINUTE * 1440;
42
43
44 public static final int WEEK = MINUTE * 10080;
45
46
47 public static final KerberosTime INFINITY = new KerberosTime( Long.MAX_VALUE );
48
49 private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
50 private static final SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyyMMddHHmmss'Z'" );
51
52 static
53 {
54 dateFormat.setTimeZone( UTC_TIME_ZONE );
55 }
56
57 private long kerberosTime;
58
59
60
61
62
63 public KerberosTime()
64 {
65 kerberosTime = System.currentTimeMillis();
66 }
67
68
69
70
71
72
73
74 public KerberosTime( long time )
75 {
76 kerberosTime = time;
77 }
78
79
80
81
82
83
84
85 public KerberosTime( Date time )
86 {
87 kerberosTime = time.getTime();
88 }
89
90
91
92
93
94
95
96
97
98 public static KerberosTime getTime( String zuluTime ) throws ParseException
99 {
100 Date date = null;
101 synchronized ( dateFormat )
102 {
103 date = dateFormat.parse( zuluTime );
104 }
105 return new KerberosTime( date );
106 }
107
108
109 public int compareTo( KerberosTime that )
110 {
111 final int BEFORE = -1;
112 final int EQUAL = 0;
113 final int AFTER = 1;
114
115
116 if ( this == that )
117 {
118 return EQUAL;
119 }
120
121
122 if ( this.kerberosTime < that.kerberosTime )
123 {
124 return BEFORE;
125 }
126
127 if ( this.kerberosTime > that.kerberosTime )
128 {
129 return AFTER;
130 }
131
132 return EQUAL;
133 }
134
135
136
137
138
139
140
141 public long getTime()
142 {
143 return kerberosTime;
144 }
145
146
147
148
149
150
151
152 public Date toDate()
153 {
154 return new Date( kerberosTime );
155 }
156
157
158
159
160
161
162
163
164 public boolean isInClockSkew( long clockSkew )
165 {
166 return Math.abs( kerberosTime - System.currentTimeMillis() ) < clockSkew;
167 }
168
169
170
171
172
173
174
175
176 public boolean greaterThan( KerberosTime time )
177 {
178 return kerberosTime > time.kerberosTime;
179 }
180
181
182
183
184
185
186
187
188 public boolean lessThan( KerberosTime time )
189 {
190 return kerberosTime < time.kerberosTime;
191 }
192
193
194
195
196
197
198
199
200 public boolean equals( KerberosTime time )
201 {
202 return kerberosTime == time.kerberosTime;
203 }
204
205
206
207
208
209
210
211 public boolean isZero()
212 {
213 return kerberosTime == 0;
214 }
215
216
217 public String toString()
218 {
219 Date kerberosDate = new Date( kerberosTime );
220
221 synchronized ( dateFormat )
222 {
223 return dateFormat.format( kerberosDate );
224 }
225 }
226 }