一尘不染

时差程序

java

我正在使用以下函数来计算时差。它没有显示正确的输出。经过1个月的时差后,显示2分钟的时差。

我的程序有什么问题?

public String TimestampDiff(Timestamp t) {
    long t1 = t.getTime();
    String st = null;
    long diff;
    java.util.Date date = new java.util.Date();
    long currT = date.getTime();
    System.out.println();
    System.out.println(" current timesstamp is  " + currT);

    diff = (currT - t1) / 60;
    int years = (int) Math.floor(diff / (1000 * 60 * 60 * 24 * 365));
    double remainder = Math.floor(diff % (1000 * 60 * 60 * 24 * 365));
    int days = (int) Math.floor(remainder / (1000 * 60 * 60 * 24));
    remainder = Math.floor(remainder % (1000 * 60 * 60 * 24));
    int hours = (int) Math.floor(remainder / (1000 * 60 * 60));
    remainder = Math.floor(remainder % (1000 * 60 * 60));
    int minutes = (int) Math.floor(remainder / (1000 * 60));
    remainder = Math.floor(remainder % (1000 * 60));
    int seconds = (int) Math.floor(remainder / (1000));
    System.out.println("\nyr:Ds:hh:mm:ss " + years + ":" + days + ":"
            + hours + ":" + minutes + ":" + seconds);

    if (years == 0 && days == 0 && hours == 0 && minutes == 0) {
        st = "few seconds ago";
    } else if (years == 0 && days == 0 && hours == 0) {
        st = minutes + " minuts ago";
    } else if (years == 0 && days == 0) {
        st = hours + " hours ago";
    } else if (years == 0 && days == 1) {
        st = new SimpleDateFormat("'yesterday at' hh:mm a").format(t1);

    } else if (years == 0 && days > 1) {
        st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(t1);

    } else if (years > 0) {
        st = new SimpleDateFormat("MMM d ''yy 'at' hh:mm a").format(t1);

    }
    st = st.replace("AM", "am").replace("PM", "pm");
    return st;
}

阅读 202

收藏
2020-12-03

共1个答案

一尘不染

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);


}
2020-12-03