給一個日期串,在不使用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

相關文章
相關標籤/搜索