您的位置:首页 > 其它

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

2017-08-30 00:00 141 查看
摘要: 计算天数

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

当时小弟觉得,这完全是被帮助手脚被人啪啪啪的感觉啊。。浑身不自在。后来说

org.joda.time.DateTime

这个对象可以搞定。但面试官又问了。如果是自己实现呢?没回答出来。

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

思路:将日期串转换成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天,官网是这么解释的

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

最后附上DateTime的用法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐