我有这么一个需求 想写个方法 传入的参数是 一个String类型的时间 例如:2009-02-17 17:10:10
在这个方法里我获取当前日期,如果我传的参数日期在后面,返回一个String类型的他们之间的时间差 只到小时 例如:38:15:00(三十八小时15分) 如果获取的当前日期在后面 则返回0

解决方案 »

  1.   

    public static String minus(String strTime) throws ParseException {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date date = format.parse(strTime);
    Date now = new Date();
    if (now.after(date)) {
    return "0";
    } else {
    long time = date.getTime() - now.getTime();
    int hour = (int) (time / (60 * 60 * 1000));
    int minute = (int) ((time % (60 * 60 * 1000)) / (60 * 1000));
    int second = (int) (((time % (60 * 60 * 1000)) % (60 * 1000)) / 1000 + 1);
    return "" + (hour < 10 ? ("0"+ hour) : hour) + ":" + (minute < 10 ? ("0"+ minute) : minute) + ":" + (second < 10 ? ("0"+ second) : second);
    }
    }
      

  2.   

    改一下,免得出现60分,60秒的值
    public static String minus(String strTime) throws ParseException {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date date = format.parse(strTime);
    Date now = new Date();
    System.out.println(date);
    System.out.println(now);
    if (now.after(date)) {
    return "0";
    } else {
    long time = date.getTime() - now.getTime();
    int hour = (int) (time / (60 * 60 * 1000));
    int minute = (int) ((time % (60 * 60 * 1000)) / (60 * 1000));
    int second = (int) (((time % (60 * 60 * 1000)) % (60 * 1000)) / 1000 + 1);
    if (second == 60) {
    second = 0;
    minute += 1;
    }
    if (minute == 60) {
    minute = 0;
    hour += 1;
    }
    return "" + (hour < 10 ? ("0"+ hour) : hour) + ":" + (minute < 10 ? ("0"+ minute) : minute) + ":" + (second < 10 ? ("0"+ second) : second);
    }
    }
      

  3.   


    public static String getSubTime(String time) throws Exception {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date rightNow = new Date();
    Date target = simpleDateFormat.parse(time);
    if (rightNow.after(target)) {
    return "0";
    }
    long subTime = target.getTime() - rightNow.getTime();
    StringBuffer sb = new StringBuffer();
    sb.append(subTime / 3600000).append(":");
    if (subTime % 3600000 == 0) {
    return sb.append("00:00").toString();
    }
    subTime = subTime % 3600000;
    long temp = subTime / 60000;
    sb.append(temp < 10 ? "0" + temp : temp).append(":");
    if (subTime % 60000 == 0) {
    return sb.append("00").toString();
    }
    subTime = subTime % 60000;
    temp = subTime / 1000;
    sb.append(temp < 10 ? "0" + temp : temp);
    return sb.toString();
    }
    虽然lz已经结贴,但我觉得除了我的方法,应该还有更优化的方法。