Time difference program

后端 未结 3 1307
梦谈多话
梦谈多话 2021-01-29 16:08

I am using following function to calculate time difference. It is not showing proper output. After 1 month time difference it is showing 2 minutes difference.

What is wr

相关标签:
3条回答
  • 2021-01-29 16:47
    import org.apache.commons.lang.time.DateUtils;
    import java.text.SimpleDateFormat;
    
    
    @Test
    public void testDate() throws Exception {
    
        long t1 = new SimpleDateFormat("dd.MM.yyyy").parse("20.03.2013").getTime();
        long now = System.currentTimeMillis();
        String result = null;
        long diff = Math.abs(t1-now);
    
    
        if(diff < DateUtils.MILLIS_PER_MINUTE){
             result =  "few seconds ago";
        }else if(diff < DateUtils.MILLIS_PER_HOUR){
             result = (int)(diff/DateUtils.MILLIS_PER_MINUTE) + " minuts ago";
        }else if(diff < DateUtils.MILLIS_PER_DAY){
            result =  (int)(diff/DateUtils.MILLIS_PER_HOUR) + " hours ago";
        }else if(diff < DateUtils.MILLIS_PER_DAY * 2){
            result = new SimpleDateFormat("'yesterday at' hh:mm a").format(t1);
        }else if(diff < DateUtils.MILLIS_PER_DAY * 365){
            result = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(t1);
        } else{
            result = new SimpleDateFormat("MMM d ''yy 'at' hh:mm a").format(t1);
        }
        result = result.replace("AM", "am").replace("PM", "pm");
        System.out.println(result);
    
    
    }
    
    0 讨论(0)
  • 2021-01-29 16:51

    Don't cast long to int, cause it will lose its precision. change all int to long, and see the difference.

    hope this help

    0 讨论(0)
  • 2021-01-29 16:59

    I recommend to take a look at Joda Time, noting that:

    Joda-Time is the de facto standard date and time library for Java prior to Java SE 8. Users are now asked to migrate to java.time (JSR-310).

    Installation

    • For Debian-based systems: libjoda-time-java. The jar will be in /usr/share/java as joda-time.jar
    • For others: Download latest jar, e.g. joda-time-2.2-dist.zip which includes joda-time-2.2.jar

    When you use Eclipse, add it to your Java Build path (Project > Properties > Java Build Path > Add External Jar)

    Relevant JavaDoc

    • DateTime
    • Period
    • PeriodFormatter
    • PeriodFormatterBuilder

    Example code

    import java.sql.Timestamp;
    import java.util.Date;
    import org.joda.time.DateTime;
    import org.joda.time.Period;
    import org.joda.time.format.PeriodFormatter;
    import org.joda.time.format.PeriodFormatterBuilder;
    
    public class MinimalWorkingExample {
        static Date date = new Date(1990, 4, 28, 12, 59);
    
        public static String getTimestampDiff(Timestamp t) {
            final DateTime start = new DateTime(date.getTime());
            final DateTime end = new DateTime(t);
            Period p = new Period(start, end);
            PeriodFormatter formatter = new PeriodFormatterBuilder()
                    .printZeroAlways().minimumPrintedDigits(2).appendYears()
                    .appendSuffix(" year", " years").appendSeparator(", ")
                    .appendMonths().appendSuffix(" month", " months")
                    .appendSeparator(", ").appendDays()
                    .appendSuffix(" day", " days").appendSeparator(" and ")
                    .appendHours().appendLiteral(":").appendMinutes()
                    .appendLiteral(":").appendSeconds().toFormatter();
            return p.toString(formatter);
        }
    
        public static void main(String[] args) {
            String diff = getTimestampDiff(new Timestamp(2013, 3, 20, 7, 51, 0, 0));
            System.out.println(diff);
        }
    }
    

    Output:

    22 years, 10 months, 01 day and 18:52:00
    

    Why I recommend a new solution

    • It is shorter (726 characters / 14 lines in comparison to your 1665 characters / 41 lines)
    • It is easier to understand
    • It is easier to adjust
    • Separation of code and presentation is clearer
    • I don't want to fix your code
    0 讨论(0)
提交回复
热议问题