Shows before time like Twitter
I’m using DateUtils.getRelativeTimeSpanString()
to display the posting time.
The string it returns is something like this: 1 minute ago, but I guess 1 m or 1 h and so on (shortened and not before).
I can replace “hours” with “h” or “minutes” with “m”, but it doesn’t work if the language is different from English. Twitter
is using it now. English/Cyrillic How Twitter is displayed.
Update: I’ll accept @Bradley Wilson’s answer, although I’ll add a cleaner solution here (with the JodaTime package again). In addition, the rest of the answers can also be modified to the same result, so they are worth voting. Thank you all :
DateTime postMaded = new DateTime(your previous date);
DateTime nowUpdate = new DateTime();
Period period = new Period(postMaded, nowUpdate);
PeriodFormatter formatter;
Locale current = ConverterMethods.getCurrentLocale();
if (current.getLanguage().contentEquals(any Cyrillic language )) {
if (period.getYears() != 0) {
formatter = new PeriodFormatterBuilder().appendYears().appendSuffix(" г."). printZeroNever().toFormatter();
} else if (period.getMonths() != 0) {
formatter = new PeriodFormatterBuilder().appendMonths().appendSuffix(" м").printZeroNever().toFormatter();
} else if (period.getWeeks() != 0) {
formatter = new PeriodFormatterBuilder().appendWeeks().appendSuffix(" седм."). printZeroNever().toFormatter();
} else if (period.getDays() != 0) {
formatter = new PeriodFormatterBuilder().appendDays().appendSuffix(" д").printZeroNever().toFormatter();
} else if (period.getHours() != 0) {
formatter = new PeriodFormatterBuilder().appendHours().appendSuffix(" ч").printZeroNever().toFormatter();
} else if (period.getMinutes() != 0) {
formatter = new PeriodFormatterBuilder().appendMinutes().appendSuffix(" мин").printZeroNever().toFormatter();
} else {
formatter = new PeriodFormatterBuilder().appendSeconds().appendSuffix(" с").printZeroNever().toFormatter();
}
} else {
if (period.getYears() != 0) {
formatter = new PeriodFormatterBuilder().appendYears().appendSuffix(" y").printZeroNever().toFormatter();
} else if (period.getMonths() != 0) {
formatter = new PeriodFormatterBuilder().appendMonths().appendSuffix(" mon").printZeroNever().toFormatter();
} else if (period.getWeeks() != 0) {
formatter = new PeriodFormatterBuilder().appendWeeks().appendSuffix(" w").printZeroNever().toFormatter();
} else if (period.getDays() != 0) {
formatter = new PeriodFormatterBuilder().appendDays().appendSuffix(" d").printZeroNever().toFormatter();
} else if (period.getHours() != 0) {
formatter = new PeriodFormatterBuilder().appendHours().appendSuffix(" h").printZeroNever().toFormatter();
} else if (period.getMinutes() != 0) {
formatter = new PeriodFormatterBuilder().appendMinutes().appendSuffix(" m").printZeroNever().toFormatter();
} else {
formatter = new PeriodFormatterBuilder().appendSeconds().appendSuffix(" s").printZeroNever().toFormatter();
}
}
Solution
Check out PrettyTime library.
It’s very simple to use :
Import org.ocpsoft.prettytime.prettyTime
PrettyTime p = new PrettyTime();
System.out.println(p.format(new Date()));
prints "moments ago"
You can also pass in locales: for internationalized messages
PrettyTime p = new PrettyTime(new Locale("fr"));
System.out.println(p.format(new Date()));
prints "à l'instant"
As mentioned in the review, Android has built this feature into android.text.format.DateUtils
Medium class.