如何正确计算两个日期之间的实际月份数?

2024-04-15

我已经按照方法getDiffDateMap计算两个日期之间的差异并返回Map分别表示毫秒、秒、分钟、小时、天、月和年的整数。

public static Map<Integer, String> getDiffDateMap(String dateA, String dateB) {

    Calendar cal = Calendar.getInstance();      
    Map<Integer,String> out = new LinkedHashMap<Integer, String>();
    long timeInMillA = 0;
    long timeInMillB = 0;

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

    Date convertedDateA;
    Date convertedDateB;



    try {
        convertedDateA = dateFormat.parse(dateA);           
        cal.setTime(convertedDateA);
        timeInMillA = cal.getTimeInMillis();


        convertedDateB = dateFormat.parse(dateB);           
        cal.setTime(convertedDateB);
        timeInMillB = cal.getTimeInMillis();

    } catch (ParseException e) {
        e.printStackTrace();
    } 

    long mili = timeInMillB - timeInMillA;
    long sec = mili/1000;
    long min = sec/60;
    long hour = min/60;
    long day = hour/24;
    long week = day/7;
    long month = day/31; // ????
    long year = month/12;

    out.put(7, mili + "");
    out.put(6, sec + "");
    out.put(5, min + "");
    out.put(4, hour + "");
    out.put(3, day + "");
    out.put(2, week + "");
    out.put(1, month + "");
    out.put(0, year + "");

    return out;
}

我的问题是根据实际天数计算月份:

long month = day/31; // or 30

例如:

Map<Integer,String> out = getDiffInMillsec("2012-9-01 20:9:01", "2012-10-01 20:10:01");

    System.out.println(Arrays.asList(out)); 

我得到输出:[{7=2592060000, 6=2592060, 5=43201, 4=720, 3=30, 2=4, 1=0, 0=0}] where 1是月份数,其值为 0。因为相差仅 30 天。我需要添加什么流程来解决这个问题?有什么建议么?


我遵循 getDiffDateMap 方法,该方法计算两个日期之间的差异并返回分别表示毫秒、秒、分钟、小时、天、月和年的整数映射。

不要重新发明轮子:)

乔达时间 http://joda-time.sf.net有代码可以完成所有这些以及更多操作。例如:

LocalDateTime start = ...;
LocalDateTime end = ...;
Period difference = new Period(start, end, PeriodType.yearMonthDayTime());
int months = difference.getMonths(); // etc

请注意,您can't获取刚刚将差异转换为毫秒数时的月数 - 因为月数取决于开始/结束日期。 (例如,30 天可能是也可能不是一个月......)

我强烈建议您在整个 Java 代码中使用 Joda Time,而不是java.util.*。它是much更好的 API,并且有望意味着您很少(如果有的话)需要编写自己的日期/时间处理代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确计算两个日期之间的实际月份数? 的相关文章

随机推荐