1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.shared.kerberos;
21
22
23 import java.text.ParseException;
24 import java.util.Calendar;
25 import java.util.Date;
26 import java.util.Locale;
27 import java.util.TimeZone;
28
29 import org.apache.directory.api.util.Strings;
30
31
32
33
34
35
36
37
38
39 public class KerberosTime implements Comparable<KerberosTime>, java.io.Serializable
40 {
41
42
43
44 private static final long serialVersionUID = -7541256140193748103L;
45
46
47 private static final TimeZone UTC = TimeZone.getTimeZone( "UTC" );
48
49
50 private String date;
51
52
53 private long kerberosTime;
54
55
56 public static final KerberosTimeros/KerberosTime.html#KerberosTime">KerberosTime INFINITY = new KerberosTime( Long.MAX_VALUE );
57
58
59 public static final int MINUTE = 60000;
60
61
62 public static final int DAY = MINUTE * 1440;
63
64
65 public static final int WEEK = MINUTE * 10080;
66
67
68
69
70
71 public KerberosTime()
72 {
73 kerberosTime = ( System.currentTimeMillis() / 1000L ) * 1000L;
74 convertInternal( kerberosTime );
75 }
76
77
78
79
80
81
82
83 public KerberosTime( String date )
84 {
85 try
86 {
87 setDate( date );
88 }
89 catch ( ParseException pe )
90 {
91 throw new IllegalArgumentException( "Bad time : " + date );
92 }
93 }
94
95
96
97
98
99 public KerberosTime( long date )
100 {
101 convertInternal( date );
102 }
103
104
105
106
107
108
109
110 public KerberosTime( Date time )
111 {
112 kerberosTime = ( time.getTime() / 1000L ) * 1000L;
113 convertInternal( kerberosTime );
114 }
115
116
117
118
119
120
121
122
123 private void convertInternal( long date )
124 {
125 Calendar calendar = Calendar.getInstance( UTC, Locale.ROOT );
126 calendar.setTimeInMillis( date );
127
128 synchronized ( KerberosUtils.UTC_DATE_FORMAT )
129 {
130 this.date = KerberosUtils.UTC_DATE_FORMAT.format( calendar.getTime() );
131 }
132
133 kerberosTime = ( calendar.getTimeInMillis() / 1000L ) * 1000L;
134 }
135
136
137
138
139
140
141
142 public long getTime()
143 {
144 return kerberosTime;
145 }
146
147
148
149
150
151
152
153 public Date toDate()
154 {
155 return new Date( kerberosTime );
156 }
157
158
159
160
161
162
163
164
165
166 public static KerberosTime getTime( String zuluTime ) throws ParseException
167 {
168 Date date = null;
169
170 synchronized ( KerberosUtils.UTC_DATE_FORMAT )
171 {
172 date = KerberosUtils.UTC_DATE_FORMAT.parse( zuluTime );
173 }
174
175 return new KerberosTime( date );
176 }
177
178
179
180
181
182
183 public void setDate( String date ) throws ParseException
184 {
185 synchronized ( KerberosUtils.UTC_DATE_FORMAT )
186 {
187 kerberosTime = KerberosUtils.UTC_DATE_FORMAT.parse( date ).getTime();
188 }
189
190 convertInternal( kerberosTime );
191 }
192
193
194
195
196
197 public byte[] getBytes()
198 {
199 return Strings.getBytesUtf8( date );
200 }
201
202
203
204
205
206 public String getDate()
207 {
208 return date;
209 }
210
211
212 @Override
213 public int hashCode()
214 {
215 return ( int ) kerberosTime;
216 }
217
218
219 @Override
220 public boolean equals( Object obj )
221 {
222 if ( this == obj )
223 {
224 return true;
225 }
226
227 if ( !( obj instanceof KerberosTime ) )
228 {
229 return true;
230 }
231
232 KerberosTime../../../org/apache/directory/shared/kerberos/KerberosTime.html#KerberosTime">KerberosTime other = ( KerberosTime ) obj;
233
234 return kerberosTime == other.kerberosTime;
235 }
236
237
238
239
240
241
242
243
244 public boolean isInClockSkew( long clockSkew )
245 {
246
247 long delta = Math.abs( kerberosTime - System.currentTimeMillis() );
248
249 return delta < clockSkew;
250 }
251
252
253
254
255
256
257
258
259
260 public int compareTo( KerberosTime that )
261 {
262 final int BEFORE = -1;
263 final int EQUAL = 0;
264 final int AFTER = 1;
265
266
267 if ( this == that )
268 {
269 return EQUAL;
270 }
271
272
273 if ( this.kerberosTime < that.kerberosTime )
274 {
275 return BEFORE;
276 }
277
278 if ( this.kerberosTime > that.kerberosTime )
279 {
280 return AFTER;
281 }
282
283 return EQUAL;
284 }
285
286
287
288
289
290
291
292 public boolean lessThan( KerberosTime ktime )
293 {
294 return kerberosTime <= ktime.kerberosTime;
295 }
296
297
298
299
300
301
302
303 public boolean greaterThan( KerberosTime ktime )
304 {
305 return kerberosTime > ktime.kerberosTime;
306 }
307
308
309
310
311
312
313
314 public boolean isZero()
315 {
316 return kerberosTime == 0;
317 }
318
319
320
321
322
323 public String toString()
324 {
325 return date;
326 }
327 }