-
Notifications
You must be signed in to change notification settings - Fork 3
/
AbstractDateHandler.java
171 lines (133 loc) · 5.14 KB
/
AbstractDateHandler.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package de.flower.rmt.util.prettytime;
import de.flower.rmt.util.Dates;
import de.flower.rmt.util.prettytime.i18n.Resources;
import org.joda.time.DateTime;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.concurrent.TimeUnit;
public abstract class AbstractDateHandler implements IDateHandler {
private ResourceBundle bundle;
protected Locale locale;
public AbstractDateHandler(Locale locale) {
// Resource bundles need to be in the given package, names start with
// 'Resources', e.g. 'Resources_de.java'
this.locale = locale;
this.bundle = ResourceBundle.getBundle(Resources.class.getName(), locale);
}
protected final String format(String resourceKey, Object... args) {
String pattern = bundle.getString(resourceKey);
return MessageFormat.format(pattern, args);
}
protected final String getPlural(long value) {
return (value > 1) ? "Plural" : "";
}
public static boolean isSameDay(final DateTime d1, final DateTime d2) {
return (d1.dayOfYear().equals(d2.dayOfYear()) && d1.year().equals(d2.year()));
}
public static class JustNow extends AbstractDateHandler {
public JustNow(Locale locale) {
super(locale);
}
@Override
public boolean canHandle(final Date date, final long delta) {
long deltaMinutes = TimeUnit.MILLISECONDS.toMinutes(delta);
return (deltaMinutes < 1) ? true : false;
}
@Override
public String format(final Date date, final long delta) {
return format("JustNowPastPattern");
}
}
public static class Minute extends AbstractDateHandler {
public Minute(Locale locale) {
super(locale);
}
@Override
public boolean canHandle(final Date date, final long delta) {
long deltaMinutes = TimeUnit.MILLISECONDS.toMinutes(delta);
return (deltaMinutes < 60) ? true : false;
}
@Override
public String format(final Date date, final long delta) {
long minutes = TimeUnit.MILLISECONDS.toMinutes(delta);
return format("MinutePastPattern" + getPlural(minutes), minutes);
}
}
public static class Hour extends AbstractDateHandler {
public Hour(Locale locale) {
super(locale);
}
@Override
public boolean canHandle(final Date date, final long delta) {
long deltaHours = TimeUnit.MILLISECONDS.toHours(delta);
return (deltaHours <= 12) ? true : false;
}
@Override
public String format(final Date date, final long delta) {
long hours = TimeUnit.MILLISECONDS.toHours(delta);
return format("HourPastPattern" + getPlural(hours), hours);
}
}
public static class Today extends AbstractDateHandler {
public Today(Locale locale) {
super(locale);
}
@Override
public boolean canHandle(final Date date, final long delta) {
DateTime referenceDate = new DateTime(date).plus(delta);
DateTime jDate = new DateTime(date);
return isSameDay(referenceDate, jDate);
}
@Override
public String format(final Date date, final long delta) {
return format("TodayPattern", Dates.formatTimeShort(date));
}
}
public static class Yesterday extends AbstractDateHandler {
public Yesterday(Locale locale) {
super(locale);
}
@Override
public boolean canHandle(final Date date, final long delta) {
DateTime referenceDate = new DateTime(date).plus(delta);
DateTime yesterDay = referenceDate.minusDays(1);
DateTime jDate = new DateTime(date);
return (isSameDay(yesterDay, jDate));
}
@Override
public String format(final Date date, final long delta) {
return format("YesterdayPattern", Dates.formatTimeShort(date));
}
}
public static class Week extends AbstractDateHandler {
public Week(Locale locale) {
super(locale);
}
@Override
public boolean canHandle(final Date date, final long delta) {
long deltaDays = TimeUnit.MILLISECONDS.toDays(delta);
return (deltaDays <= 6) ? true : false;
}
@Override
public String format(final Date date, final long delta) {
String sDay = new SimpleDateFormat("EEEE", locale).format(date);
return format("WeekPattern", sDay, Dates.formatTimeShort(date));
}
}
public static class Default extends AbstractDateHandler {
public Default(Locale locale) {
super(locale);
}
@Override
public boolean canHandle(final Date date, final long delta) {
return true;
}
@Override
public String format(final Date date, final long delta) {
return format("DefaultPattern", Dates.formatDateLong(date), Dates.formatTimeShort(date));
}
}
}