给一个日期串,在不使用calendar,不计算平闰年的状况下计算当月天数

小弟最近面试,觉得面试官:给一个日期串,在不使用calendar,不计算平闰年的状况下计算当月天数,怎么计算?java

当时小弟以为,这彻底是被帮助手脚被人啪啪啪的感受啊。。浑身不自在。后来讲面试

org.joda.time.DateTime

这个对象能够搞定。但面试官又问了。若是是本身实现呢?没回答出来。code

今天请教了一些大牛,给了一些思路。最后搞出来了。orm

思路:将日期串转换成date对象,而后获取到下个月的第一天,再减1天,获得当前月的最后1天,最后在获取这一天就好了对象

package com.wisely;



import org.joda.time.DateTime;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * DES: 计算当月的天数,不用calendar 不计算平闰年
 * Created by Reynole-白
 * Date: 2017/8/30 10:06
 */
public class TestDate {

    public static void main(String[] args) throws Exception {
        String dateStr = "2017-08-30";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date dd = sdf.parse(dateStr);


        //date对象计算月份从0开始,若是+1 表明下个月
        int month = dd.getMonth() + 1;
        //获取到下个月的月份
        dd.setMonth(month);
        //下个月的首日
        dd.setDate(1);

        //下个月的首日-1 的到当前月的最后1天  也就是当前月的天数
        dd.setDate(dd.getDate()-1);

        System.out.println("当前月的天数:" + dd.getDate());

        //-------------------------------------------------------------------------------
        //使用joda-time 操做
        DateTime dateTime = new DateTime(dateStr);
        System.out.println("获取当前月的天数:"+dateTime.dayOfMonth().getMaximumValue());

    }

}

我发现使用date的setDate(0)后,能将date对象变成上个月的最后1天,官网是这么解释的get

将该日期的日期设置为
*指定值。该对象被修改成
*表示在指定日期内的某一时间点。
*月、年、月、小时、分、秒相同。
*如之前在当地时区所解释的那样。若是日期
*是4月30日,例如,日期定为31,而后
*将被视为5月1日,由于四月只有
* 30天。
*
* @param日期当天的月值之间1-31。
*“看java.util.calendar
*“过期的JDK版本1.1,
* <代码>历取代。集(calendar.day_of_month,int日期)</代码>。io

最后附上DateTime的用法class

相关文章
相关标签/搜索