How to calculate relative past time from a given date & time (e.g., 3 hours ago, 5 days ago, a month ago) in Java

1 Answer

0 votes
import java.time.Instant;
import java.time.temporal.ChronoUnit;

public class RelativeTime {

    public static String toRelativePastTime(Instant dateTime) {
        Instant now = Instant.now();
        long seconds = Math.abs(ChronoUnit.SECONDS.between(now, dateTime));

        long minutes = seconds / 60;
        long hours   = seconds / 3600;
        long days    = seconds / 86400;

        if (seconds < 60)
            return (seconds == 1) ? "one second ago" : seconds + " seconds ago";

        if (seconds < 3600)
            return (minutes == 1) ? "a minute ago" : minutes + " minutes ago";

        if (seconds < 86400)
            return (hours == 1) ? "an hour ago" : hours + " hours ago";

        if (seconds < 2592000) // 30 days
            return (days == 1) ? "yesterday" : days + " days ago";

        if (seconds < 31104000) { // 12 months
            long months = days / 30;
            return (months <= 1) ? "a month ago" : months + " months ago";
        }

        long years = days / 365;
        return (years <= 1) ? "a year ago" : years + " years ago";
    }

    public static void test(double hoursAgo) {
        long secondsAgo = Math.round(hoursAgo * 3600);
        Instant past = Instant.now().minusSeconds(secondsAgo);
        System.out.println(toRelativePastTime(past));
    }

    public static void main(String[] args) {
        test(0.01);    // 36 seconds ago
        test(0.2);     // 12 minutes ago
        test(3);       // 3 hours ago
        test(25);      // yesterday
        test(360);     // 15 days ago
        test(1239);    // a month ago
        test(2239);    // 3 months ago
        test(8760);    // a year ago
        test(98763);   // 11 years ago
    }
}


/*
run:

36 seconds ago
12 minutes ago
3 hours ago
yesterday
15 days ago
a month ago
3 months ago
a year ago
11 years ago

*/

 



answered Apr 13 by avibootz

Related questions

...