今天突然遇到一个简单问题却被难住了,怎样获得某一年某一月的总天数?
比如如何算出2005-12月共有31天。自己想了一个算法但是觉得太烦,所以向各位征集简单的算法,请大家多多参与。
比如如何算出2005-12月共有31天。自己想了一个算法但是觉得太烦,所以向各位征集简单的算法,请大家多多参与。
解决方案 »
- 用ant编译,报找不到符号。
- Xmx只能设到1.8G吗,我机器8g内存,怎么才能不浪费呢
- 哪里有问题,点击没反应
- System.out.flush();是什么意思?
- 询问out的一种用法
- 怎样判断字符串"2006-16-25"不是正确的Date?
- 关于jxl读取excel文件的问题,在线等待......
- 如果我要在iis中访问servlet,什么插件好使
- 怎样把字符串 str="{a=1,b=2}" 转换为Hashtable?
- HTTP Status 400 – Bad Request ,报错问题,请大佬看springMVC配置文件 :的zhu'ji
- 我刚装好JDK1.4.2,怎么程序不能运行啊?!!!
- 请教二个用servlet做jsp网页的问题,谢谢!(我是菜鸟,请别见笑)
一,三,五,七,八,十,十二 是31天。
四,六,九,十一是30天。
二月最特殊,要根据年份来判断,闰年29天,不是闰年28天。
闰年的算法: 闰年年份可以被4整除而不能被100整除,或者能被400整除。
(year%4==0&&year%100!=0)||(year%400==0)
* 校验给定的年月日是否为一个有效日期
* @param year String 给定的年份
* @param month String 给定的月份
* @param day String 给定的日期
* @return Boolean 返回的布尔类型对象
*/
private static Boolean isDate(String year, String month, String day) { int intYear = Integer.parseInt(year);
int intMonth = Integer.parseInt(month);
int intDay = Integer.parseInt(day); if (!isYear(year).booleanValue()) {
return new Boolean(false);
} if (!isMonth(month).booleanValue()) {
return new Boolean(false);
} if (!isDay(day).booleanValue()) {
return new Boolean(false);
} if (intDay > (daysInMonth[new Integer(intMonth).intValue() - 1]).intValue()) {
return new Boolean(false);
}
if ( (intMonth == 2) && (intDay > daysInFebruary(intYear).intValue())) {
return new Boolean(false);
} return new Boolean(true);
} /**
* 判断给定年份的2月份有多少天
* @param year int 给定的年份
* @return Integer 返回的天数
*/
private static Integer daysInFebruary(int year) {
return new Integer( ( (year % 4 == 0) && ( (! (year % 100 == 0)) || (year % 400 == 0))) ? 29 :
28);
} /**
* 校验一个字符串是否为一个有效的日期数字(1-31以内)
* @param day String 要校验的日期字符串
* @return Boolean 返回的布尔类型对象
*/
private static Boolean isDay(String day) { if (!isNotNull(day).booleanValue()) {
return new Boolean(false);
} if (!isIntegerInRange(day, new Integer(1), new Integer(31)).booleanValue()) {
return new Boolean(false);
} return new Boolean(true);
} /**
* 校验一个字符串是否为一个有效的年份数字(必须由2位或4位数字组成)
* @param year String 要校验的年份字符串
* @return Boolean 返回的布尔类型对象
*/
private static Boolean isYear(String year) { if (!isNotNull(year).booleanValue()) {
return new Boolean(false);
} if (!isValidNegative(year).booleanValue()) {
return new Boolean(false);
} if (! ( (year.length() == 2) || (year.length() == 4))) {
return new Boolean(false);
} return new Boolean(true);
} /**
* 校验一个字符串是否为一个有效的月份数字(1-12以内
* @param month String 要校验的月份字符串
* @return Boolean 返回的布尔类型对象
*/
private static Boolean isMonth(String month) { if (!isNotNull(month).booleanValue()) {
return new Boolean(false);
} if (!isIntegerInRange(month, new Integer(1), new Integer(12)).booleanValue()) {
return new Boolean(false);
} return new Boolean(true);
} /**
* 校验一个字符串是否非空
* @param validateString String 要校验的字符串
* @return Boolean 返回的布尔类型对象
*/
private static Boolean isNotNull(String validateString) { return new Boolean( (validateString != null && !"".equals(validateString)));
} /**
* 判断一个整数型字符串是否在定义区间内
* @param validateStr String 要校验的字符串
* @param indexStart Integer 定义区间最小值
* @param indexEnd Integer 定义区间最大值
* @return Boolean 返回的布尔类型对象
*/
private static Boolean isIntegerInRange(String validateStr, Integer indexStart, Integer indexEnd) { if (!isNotNull(validateStr).booleanValue()) {
return new Boolean(false);
} if (!isSignedInteger(validateStr).booleanValue()) {
return new Boolean(false);
} int num = Integer.parseInt(validateStr); if (! ( (num >= indexStart.intValue()) && (num <= indexEnd.intValue()))) {
return new Boolean(false);
} return new Boolean(true);
}
if((year%4==0 && year%100!=0) || year%400==0)
days[1]=29;
c.getMaximum(Calendar.MONTH);//获得月份域可达最大天数注意月份从0开始
int days=cal.getActualMaximum(Calendar.DAY_OF_MONTH); //29
还有个问题,我想要用js实现。当在下拉列表中选中月份的时候,后面相应的日期列表也随着动态的更改,能否给个完整一点的例子?谢谢!
public int checkMonth(int year,int month)
{
GregorianCalendar gregoriangalendar = new GregorianCalendar();
if(month==1 | month==3 | month==5 | month==7 | month==8 | month==10 | month==12)
return 31;
if(month==4 | month==6 | month==9 | month==11)
return 30;
else
{
if(gregoriangalendar.isLeapYear(year))//判断是不是闰年
return 29;
else
return 28;
}
}
c.getActualMaximum(Calendar.MONTH);//获得当月实际天数
c.getMaximum(Calendar.MONTH);//获得月份域可达最大天数在这个之后回答楼主第一个问题的人是不是眼睛都X了阿.难道看不见正确答案吗?
实在不想帮你,如果你是工作。(原因很简单啊,你给谁钱了吗?)