楼上正解,不过楼主问出这个问题可能也是初学者,我就提供一下用简单语法的代码吧
public
static
void
main(String[]
args)
{
Scanner
scan=new
Scanner(Systemin);
Systemoutprintln("请输入年份");
int
year=
scannextInt();//得到需求年份
Systemoutprintln("请输入月份");
int
month=scannextInt();//得到需求月份
switch(month){
case
1:
case
3:
case
5:
case
7:
case
8:
case
10:
case
12:
Systemoutprintln(year+"年"+month+"月的天数为:"+31);
break;
case
4:
case
6:
case
9:
case
11:
Systemoutprintln(year+"年"+month+"月的天数为:"+30);
case
2:
if((year%400)==0
||
((year%4)==0)&&((year%100)!=0)){
Systemoutprintln(year+"年2月的天数为:"+29);
}else{
Systemoutprintln(year+"年2月的天数为:"+28);
}
}
}
用毫秒数计算已经不是正确方法了。原因是夏令时间会造成计算错误。差一小时就是差一天。如果对这方面有疑问,可以补充问题,我再详细解答。
虽然在国内运用没有问题,但是如果用于国际化的金融系统就不行了。
所以建议你在学习阶段就认知,现代标准就是尽量不要使用毫秒数计算日期。
以下是正确方法:
public static long daysBetween(Calendar startDate, Calendar endDate) {
Calendar date = (Calendar) startDateclone();
long daysBetween = 0;
while (datebefore(endDate)) {
dateadd(CalendarDAY_OF_MONTH, 1);
daysBetween++;
}
return daysBetween;
}
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
public class Test {
public static void main(String[] args) {
try {
//时间转换类
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdfparse("2014-1-10");
Date date2 = sdfparse("2012-12-20");
//将转换的两个时间对象转换成Calendard对象
Calendar can1 = CalendargetInstance();
can1setTime(date1);
Calendar can2 = CalendargetInstance();
can2setTime(date2);
//拿出两个年份
int year1 = can1get(CalendarYEAR);
int year2 = can2get(CalendarYEAR);
//天数
int days = 0;
Calendar can = null;
//如果can1 < can2
//减去小的时间在这一年已经过了的天数
//加上大的时间已过的天数
if(can1before(can2)){
days -= can1get(CalendarDAY_OF_YEAR);
days += can2get(CalendarDAY_OF_YEAR);
can = can1;
}else{
days -= can2get(CalendarDAY_OF_YEAR);
days += can1get(CalendarDAY_OF_YEAR);
can = can2;
}
for (int i = 0; i < Mathabs(year2-year1); i++) {
//获取小的时间当前年的总天数
days += cangetActualMaximum(CalendarDAY_OF_YEAR);
//再计算下一年。
canadd(CalendarYEAR, 1);
}
Systemoutprintln("天数差:"+days);
} catch (ParseException e) {
eprintStackTrace();
}
}
}
Console:
天数差:386
程序就自己写吧,告诉你一个思路。先判断月份是否为2月,如果是的话判断年是否为闰年,若为闰年2月为29天,若不是闰年为28天;如果要判断的月份不是2月,判断其是否为1,3,5,7,8,10,12,若是其中的一个则为31天,剩余的月份为30天
publicStringgetLastMonthDay(){Calendarcal=CalendargetInstance();Datedate=newDate();calsetTime(date);intyear=0;intmonth=calget(CalendarMONTH);//上个月月份//intday1=calgetActualMinimum(CalendarDAY_OF_MONTH);//起始天数intday=calgetActualMaximum(CalendarDAY_OF_MONTH);//结束天数Systemoutprintln("###lastmonth:"+month);if(month==0){year=calget(CalendarYEAR)-1;month=12;}else{year=calget(CalendarYEAR);}StringendDay=year+"-"+month+"-"+day;returnendDay+"23:59:59"}
import javautilCalendar;
public class Du {
public static void main(String[] args) {
String date = "2011-01-12";
int[] daysInMonth = getMonthDays(date);
for(int value: daysInMonth){
Systemoutprint(value + " ");
}
}
private static int[] getMonthDays(String date) {
Calendar calendar = CalendargetInstance();
calendarset(CalendarYEAR, IntegerparseInt(datesubstring(0, 4)));
calendarset(CalendarMONTH, IntegerparseInt(datesubstring(5, 7)) -1);
int maxDay = calendargetActualMaximum(CalendarDAY_OF_MONTH);
int[] days = new int[maxDay];
for(int i = 1; i <= maxDay; i++){
days[i-1] = i;
}
return days;
}
}
-----------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
年闰年和非闰年,闰年366天,非闰年365天。所以判断某年多少天也就是判断是否是闰年。
闰年的判断依据
①、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
②、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
代码:
int year;//要判断的年份,比如2008int days;//某年(year)的天数
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){//闰年的判断规则
days=366;
}else{
days=365;
}
以上就是关于java 获取某月份的具体天数全部的内容,包括:java 获取某月份的具体天数、怎么求java,2个日期之间有多少天。。、java中知道两个日期如何获得两个日期之间的天数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)