-
Notifications
You must be signed in to change notification settings - Fork 1
/
Timespan.java
56 lines (46 loc) · 1.38 KB
/
Timespan.java
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.Date;
/**
* Immutable datatype representing an interval starting from one date/time and
* ending at a later date/time. The interval includes its endpoints.
*/
public class Timespan {
private final Date start;
private final Date end;
// Rep invariant:
// !end.before(start)
// Abstraction Function:
// represents the time interval from start to end, inclusive
// Safety from rep exposure:
// All fields are private and immutable. (<=== oops, false! there's rep exposure!)
private void checkRep() {
assert !end.before(start);
}
/**
* Make a Timespan.
*
* @param start starting date/time
* @param end ending date/time, requires end >= start
*/
public Timespan(Date start, Date end) {
if (start.after(end)) {
throw new IllegalArgumentException("requires start <= end");
}
this.start = new Date(start.getTime());
this.end = new Date(end.getTime());
checkRep();
}
/**
* @return the starting point of the interval
*/
public Date getStart() {
return new Date(start.getTime());
}
/**
* @return the ending point of the interval
*/
public Date getEnd() {
return new Date(end.getTime());
}
// TODO: toString()
// TODO: this immutable type needs equals() and hashCode()
}