繁体   English   中英

如何获得两个或两个月以上的小时数?

[英]How to Get the number of hours between two or more months?

我正在实现默认范围选择器,我希望用户指定默认持续时间范围

所以在我的范围内

1 day = 24 hours
3 days = 24 * 3 hours
1 week = 24 * 7 hours
1 month

我的逻辑是使用一天中的总小时数乘以总天数

但是现在问题出在范围超过2个月时,因为某些月份有31天,28天甚至30天

因此,我该如何确定从现在开始的最后两个月的小时数,以便我可以在日历中简单地

 Calendar cal = Calendar.getInstance();
 cal.add(Calendar.HOUR, cal.get(Calendar.HOUR) - hours) //stuck here

简单的例子

今天是4月2日,如何计算从1月2日到4月2日的小时数。

因此,按照我自己的逻辑,超过一个月的时间应该是这样的:

 Date today = Date.now();    
 LocalDate userday = LocalDate.of(less number of months); 
 Period diff = Period.between(userday, today); 

尝试这个

Calendar calendar = Calendar.getInstance();
calendar.set(2018,Calendar.JANUARY, 2);
Long min = calendar.getTimeInMillis();
calendar.set(2018,Calendar.APRIL, 2);
Long max = calendar.getTimeInMillis();
Long range = (max - min) / (60*60*1000); //no_of_hours

更新的答案:

Calendar calendar = Calendar.getInstance();
    Long max = calendar.getTimeInMillis();
    int currMonth = calendar.get(Calendar.MONTH);
    int currYear = calendar.get(Calendar.YEAR);
    int currDate = calendar.get(Calendar.DAY_OF_MONTH);
    int expMonth = currMonth + 3/*no_of_month*/;
    int expYear = currDate;
    int expDate = calendar.get(Calendar.DAY_OF_MONTH);
    while (expMonth > 11) {
        expMonth = expMonth - 12;
        expYear = expYear + 1; // will increment year as next month falls in next year 
    }
    calendar.set(expYear, expMonth, expDate);
    Long min = calendar.getTimeInMillis();
    Long range = (max - min) / (60 * 60 * 1000); //no_of_hours

您可以像下面这样减去月份,

Date referenceDate = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(currentDate); 
c.add(Calendar.MONTH, -3);
return c.getTime();

然后从以下代码获取时间。

long diff = currentDate.getTime() - previousDate.getTime();
long hours = minutes / (1000 * 60 * 60);

您需要一个月内的天数。

一旦确定哪个月份就很容易:

看一下: 在特定年份的特定月份的天数?

一旦有了月份,就可以计算该月份的小时数,并不断增加直到满足您的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM