如何获得今天的日期和当前月的最后日期之间的天数?

问题描述 投票:-4回答:3

所以,我想提出一个Android应用程序,我需要做的当前日期和当前月份的最后日期之间的天数计算。

假设今天是2017年1月11日和本月的最后日期是30/11/2017。所以天数将30因为30天后将于下月开始。

java android date calendar
3个回答
3
投票
    Calendar calendar = Calendar.getInstance();
    int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    int currentDay = calendar.get(Calendar.DAY_OF_MONTH);
    int daysLeft = lastDay - currentDay;


    System.out.println("Last Day: " + lastDay);
    System.out.println("Current Day : " + currentDay);
    System.out.println("There are " + daysLeft + " days left in the month.");

产量

Last Day: 30
Current Day : 1
There are 29 days left in the month.

2
投票

tl;dr

ChronoUnit.DAYS.between( today ,  firstOfNextMonth )

java.time

确定当前日期,需要一个时区。对于任何给定的时刻,该日期时区全球各地的变化。

proper time zone name的格式指定一个continent/region,如America/MontrealAfrica/Casablanca,或Pacific/Auckland。切勿使用3-4个字母的缩写,如ESTIST,因为它们不是真正的时区,不规范,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "Africa/Casablanca" ) ; 
LocalDate today = LocalDate.now( z ) ;

从这一点,得到一个对象来表示整月,目前YearMonth

YearMonth ym = YearMonth.from( today ) ;

从这一点,要求下月一日。一般处理时间跨度最好的做法是半开的方法。刚开始是包容性的,而结局是排他的。所以,当月运行到,但是包括,第一下一个月的。

LocalDate firstOfNextMonth = ym.plusMonths( 1 ).atDay( 1 ) ;

要获得的天数总共使用ChronoUnit枚举。

long days = ChronoUnit.DAYS.between( today ,  firstOfNextMonth ) ;

转储到控制台。

System.out.println( days + " days between " + today + " and " + firstOfNextMonth ) ;

看到这个code run live at IdeOne.com

2017年11月1日和2017年12月1日达到30天

仅供参考,您可以使用Period追踪的时间跨度。可用于其他目的,而不是天的计数。

Period p = Period.between( today , firstOfNextMonth ) ;

About java.time

java.time框架是建立在Java 8和更高版本。这些类取代的麻烦老legacy日期时间类,如java.util.DateCalendar,与SimpleDateFormat

该项目Joda-Time,现在在maintenance mode,建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。和搜索堆栈溢出了很多例子和解释。规格是JSR 310

从哪里获取java.time类?


1
投票

我不肯定是否java.time可以用Android,但如果它是你可以使用LocalDateChronoUnit

LocalDate today = LocalDate.now();
LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());

System.out.println(today); // 2017-11-01
System.out.println(lastDayOfMonth); // 2017-11-30
System.out.println(ChronoUnit.DAYS.between(today,lastDayOfMonth)); // 29
© www.soinside.com 2019 - 2024. All rights reserved.