1 /**
2 *
3 */
4 package org.sourceforge.jemm.types;
5
6 import java.io.Serializable;
7 import java.util.Date;
8
9 /**
10 * JemmDate is an immutable date class. This allows it to be stored as a valuetype like Integer
11 * @author Rory Graves
12 *
13 */
14 public final class JemmDate implements Serializable {
15
16 private static final long serialVersionUID = 1L;
17
18 /** The internal date representation. */
19 private final long dateRep;
20
21 /**
22 * Create a new JemmDate representing the same date/time as the given java.util.Date.
23 * @param date The date to initialise from.
24 */
25 public JemmDate(Date date) {
26 this.dateRep = date.getTime();
27 }
28
29 /**
30 * Create a new JemmDate given the number of milliseconds since January 1, 1970, 00:00:00 GMT.
31 * @param timestamp the number of milliseconds since January 1, 1970, 00:00:00 GMT of this time.
32 */
33 public JemmDate(long timestamp) {
34 this.dateRep = timestamp;
35 }
36
37 /**
38 * Return this date value as a Date.
39 * @return The represented date value as a java.util.Date
40 */
41 public Date getAsDate() {
42 return new Date(dateRep);
43 }
44
45 /**
46 * Return this date value as an sql Date.
47 * @return The represented date value as a java.sql.Date
48 */
49 public java.sql.Date getAsSqlDate() {
50 return new java.sql.Date(dateRep);
51 }
52
53 /**
54 * Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.
55 * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this date.
56 * @see java.util.Date#getTime()
57 */
58 public long getTime() {
59 return dateRep;
60 }
61
62 @Override
63 public int hashCode() {
64 return (int) (dateRep ^ (dateRep >>> 32));
65 }
66
67 @Override
68 public boolean equals(Object obj) {
69 if (this == obj)
70 return true;
71 if (obj == null)
72 return false;
73 if (getClass() != obj.getClass())
74 return false;
75 JemmDate other = (JemmDate) obj;
76 if (dateRep != other.dateRep)
77 return false;
78 return true;
79 }
80 }