Java logo
21 janvier 2014

"Humaniser" ses dates en Java

Par Jean-Marc Amon

Une classe écrite pour vous aider à rendre vos dates Java plus… User friendly. Le principe est vraiment simple, juste un peu de maths pour calculer le nombre de seconde dans une heure, une minute, un jour et etc…

Je me suis arrêté exprès aux jours pour vous laisser vous exercer avec les mois voire les années, alors à vous de jouer.

package com.marclabs.utils;

import java.util.Calendar;
import java.util.Date;

public class HumanizeDate{

    public static String getDateDifference(Date thenDate) {
        Calendar now = Calendar.getInstance();
        Calendar then = Calendar.getInstance();
        now.setTime(new Date());
        then.setTime(thenDate);


        // Recuperer la date en millisecondes
        long nowMs = now.getTimeInMillis();
        long thenMs = then.getTimeInMillis();

        // Calculer la différence en milllisecondes
        long diff = nowMs - thenMs;

        // Calculer la différence en secondes
        long diffMinutes = diff / (60 * 1000);
        long diffHours = diff / (60 * 60 * 1000);
        long diffDays = diff / (24 * 60 * 60 * 1000);
        long diffMonths = diff / (30 * 24 * 60 * 60 * 1000);

        if (diffMinutes < 60) {
            if (diffMinutes == 1)
                return " il y a une minute";
            else
                return "il y a "+diffMinutes+" minutes";
        } else if (diffHours < 24) {
            if (diffHours == 1)
                return "il y a une heure";
            else
                return  " il y a "+diffHours+" heures";
        } else if (diffDays < 30) {
            if (diffDays == 1)
                return "il y a un jour";
            else
                return  " il y a "+diffDays+" jours";
        } else {
            return "il y a un moment..";
        }
    }


}