-
Notifications
You must be signed in to change notification settings - Fork 35
/
TimeFormatter.java
75 lines (70 loc) · 2.82 KB
/
TimeFormatter.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
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
/**
* Given a date String of the format given by the Twitter API, returns a display-formatted
* String representing the relative time difference, e.g. "2m", "6d", "23 May", "1 Jan 14"
* depending on how great the time difference between now and the given date is.
* This, as of 2016-06-29, matches the behavior of the official Twitter app.
*/
public class TimeFormatter {
public static String getTimeDifference(String rawJsonDate) {
String time = "";
String twitterFormat = "EEE MMM dd HH:mm:ss ZZZZZ yyyy";
SimpleDateFormat format = new SimpleDateFormat(twitterFormat, Locale.ENGLISH);
format.setLenient(true);
try {
long diff = (System.currentTimeMillis() - format.parse(rawJsonDate).getTime()) / 1000;
if (diff < 5)
time = "Just now";
else if (diff < 60)
time = String.format(Locale.ENGLISH, "%ds",diff);
else if (diff < 60 * 60)
time = String.format(Locale.ENGLISH, "%dm", diff / 60);
else if (diff < 60 * 60 * 24)
time = String.format(Locale.ENGLISH, "%dh", diff / (60 * 60));
else if (diff < 60 * 60 * 24 * 30)
time = String.format(Locale.ENGLISH, "%dd", diff / (60 * 60 * 24));
else {
Calendar now = Calendar.getInstance();
Calendar then = Calendar.getInstance();
then.setTime(format.parse(rawJsonDate));
if (now.get(Calendar.YEAR) == then.get(Calendar.YEAR)) {
time = String.valueOf(then.get(Calendar.DAY_OF_MONTH)) + " "
+ then.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.US);
} else {
time = String.valueOf(then.get(Calendar.DAY_OF_MONTH)) + " "
+ then.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.US)
+ " " + String.valueOf(then.get(Calendar.YEAR) - 2000);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return time;
}
/**
* Given a date String of the format given by the Twitter API, returns a display-formatted
* String of the absolute date of the form "30 Jun 16".
* This, as of 2016-06-30, matches the behavior of the official Twitter app.
*/
public static String getTimeStamp(String rawJsonDate) {
String time = "";
String twitterFormat = "EEE MMM dd HH:mm:ss ZZZZZ yyyy";
SimpleDateFormat format = new SimpleDateFormat(twitterFormat, Locale.ENGLISH);
format.setLenient(true);
try {
Calendar then = Calendar.getInstance();
then.setTime(format.parse(rawJsonDate));
Date date = then.getTime();
SimpleDateFormat format1 = new SimpleDateFormat("h:mm a \u00b7 dd MMM yy");
time = format1.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return time;
}
}