In my current Android project I have a requirement to display historical string datetimes that have the following format/value examples
2023-01-06T14:52:41.633
2023-01-06T00:00:00
2022-12-23T00:00:00
2022-12-22T11:17:43.94
into string "phrases" such as
Today
1 Day Ago
3 Days Ago
1 Week Ago
4 Weeks Ago
1 Month Ago
5 Months Ago
1 Year Ago
I thought android.text.format.DateUtils
would provide the solution however the results I am seeing are wrong
the code I am using is as follows
val then = LocalDateTime.parse(productionDate)
doLogging{"xxooxx past date = ${productionDate}"}
doLogging{"xxooxx ${DateUtils.getRelativeTimeSpanString(then.toEpochSecond(ZoneOffset.UTC), LocalDateTime.now().toEpochSecond(ZoneOffset.UTC),0L, DateUtils.FORMAT_ABBREV_RELATIVE)}"}
doLogging{"xxooxx \t\t ${DateUtils.getRelativeTimeSpanString(then.toEpochSecond(ZoneOffset.UTC), LocalDateTime.now().toEpochSecond(ZoneOffset.UTC),MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE)}"}
doLogging{"xxooxx \t\t ${DateUtils.getRelativeTimeSpanString(then.toEpochSecond(ZoneOffset.UTC), LocalDateTime.now().toEpochSecond(ZoneOffset.UTC),HOUR_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE)}"}
doLogging{"xxooxx \t\t ${DateUtils.getRelativeTimeSpanString(then.toEpochSecond(ZoneOffset.UTC), LocalDateTime.now().toEpochSecond(ZoneOffset.UTC),DAY_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE)}"}
doLogging{"xxooxx \t\t ${DateUtils.getRelativeTimeSpanString(then.toEpochSecond(ZoneOffset.UTC), LocalDateTime.now().toEpochSecond(ZoneOffset.UTC),WEEK_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE)}"}
for example
2023-01-11 11:38:08.143 D xxooxx past date = 2023-01-11T08:33:18.047
2023-01-11 11:38:08.162 D xxooxx 11 sec. ago
2023-01-11 11:38:08.163 D xxooxx 0 min. ago
2023-01-11 11:38:08.164 D xxooxx 0 hr. ago
2023-01-11 11:38:08.165 D xxooxx Today
2023-01-11 11:38:08.165 D xxooxx 0 wk. ago
2023-01-11T08:33:18.047
is Today
, however it is not 11 seconds ago.
2023-01-11 11:38:08.557 xxooxx past date = 2021-11-04T00:00:00
2023-01-11 11:38:08.557 xxooxx 10 hr. ago
2023-01-11 11:38:08.557 xxooxx 10 hr. ago
2023-01-11 11:38:08.558 xxooxx 10 hr. ago
2023-01-11 11:38:08.558 xxooxx Yesterday
2023-01-11 11:38:08.558 xxooxx 0 wk. ago
2021-11-04
is not 10 hours ago from 2023-01-11 11:38:08.557
Where am I going wrong?
Can I achieve the desired result using android.text.format.DateUtils
First convert the String date to LocalDateTime object.(have used LocalDateTime as date deosn't seems to contain any time zone info. If time zone is also to be considered use ZonedDateTime )
Then use Duration class to find difference betwwen 2 dates.
Output:
Or
Use getRelativeTimeSpanString
Output: