Time difference program

后端 未结 3 1306
梦谈多话
梦谈多话 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: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

提交回复
热议问题