java 求某个月中星期天的个数 算法

问题描述

|现在在用s2s2h3做考勤统计,能得到月天数,但是一个月中的星期天的个数求不出来了,请大家忙下! 最好是不要套循环! |

解决方案

import java.util.Date;import java.util.Calendar;import java.text.SimpleDateFormat;class Demo{//返回当前年份int getYear(){Date date=new Date();String year=new SimpleDateFormat("yyyy").format(date);return Integer.parseInt(year);}//返回当前月份int getMonth(){Date date=new Date();String month=new SimpleDateFormat("MM").format(date);return Integer.parseInt(month);}//判断闰年boolean isLeap(int year){if(((year%100==0)&&year%400==0)||((year%100!=0)&&year%4==0))return true;elsereturn false;}//返回当月天数int getDays(int year,int month){int days;int FebDay=28;if(isLeap(year))FebDay=29;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=31;break;case 4:case 6:case 9:case 11:days=30;break;case 2:days=FebDay;break;default:days=0;break;}return days;}//返回当月星期天数int getSundays(int year,int month){ int sundays=0; SimpleDateFormat sdf=new SimpleDateFormat("EEEE");Calendar setDate= Calendar.getInstance();//从第一天开始int day;for(day=1;day<=getDays(year,month);day++){setDate.set(Calendar.DATE,day);String str=sdf.format(setDate.getTime());if(str.equals("星期日")){sundays++; }}return sundays;}public static void main(String[] args){Demo demo=new Demo();System.out.println ("本月有"+demo.getDays(demo.getYear(),demo.getMonth())+"天");System.out.println ("本月有"+demo.getSundays(demo.getYear(),demo.getMonth())+"个星期天"); } }
解决方案二:
不好意思,用了我之前的代码,这里改成return sundaycounts.呵呵
解决方案三:
package com.expotia.tour;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class DateDemo {public static String formatDate(Date date) {String formDate = "";SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");formDate = format.format(date);return formDate;}public static Date formatDate(String date) throws ParseException {Date time = new Date();SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");time = format.parse(date);return time;}/** * 计算指定年度共有多少个周。 * * @param year * 格式 yyyy ,必须大于1900年度 小于9999年 * @return */public static int getWeekNumByYear(final int year) {if (year < 1900 || year > 9999) {throw new NullPointerException("年度必须大于等于1900年小于等于9999年");}int result = 52;// 每年至少有52个周 ,最多有53个周。String date = getYearWeekFirstDay(year, 53);if (date.substring(0, 4).equals(year + "")) { // 判断年度是否相符,如果相符说明有53个周。// System.out.println(date);result = 53;}return result;}/** * 计算某年某周的开始日期 * * * @param yearNum * 格式 yyyy ,必须大于1900年度 小于9999年 * * @param weekNum * 1到52或者53 * @return 日期,格式为yyyy-MM-dd */public static String getYearWeekFirstDay(int yearNum, int weekNum) {Calendar cal = Calendar.getInstance();cal.setFirstDayOfWeek(Calendar.SUNDAY); // 设置每周的第一天为星期日cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 每周从周日开始// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期日的那个周。cal.setMinimalDaysInFirstWeek(7); // 设置每周最少为7天cal.set(Calendar.YEAR, yearNum);cal.set(Calendar.WEEK_OF_YEAR, weekNum);// 分别取得当前日期的年、月、日return formatDate(cal.getTime());}public static int weeksBetweenDays(String start, String end) {int counts = 1;int sundaycounts=1;Calendar c = Calendar.getInstance();Calendar c1 = Calendar.getInstance();try {Date startDate = formatDate(start);Date endDate = formatDate(end);c.setTime(startDate);c1.setTime(endDate);int weekofYear = c.get(Calendar.WEEK_OF_YEAR);int weekofYear1 = c1.get(Calendar.WEEK_OF_YEAR);int startDayOfWeek=c.get(Calendar.DAY_OF_WEEK);int endDayOfWeek=c1.get(Calendar.DAY_OF_WEEK);counts = weekofYear1 - weekofYear + 1;if(startDayOfWeek==Calendar.SUNDAY ){//如果开始的日期是星期天,那么就刚好等于这两个日期中的自然周数,如果开始的日期不是星期天,那么减1就oksundaycounts=counts;}else{sundaycounts=counts-1;}// }} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return counts;}}
解决方案四:
public static void showDate(){Date date=new Date();int year =date.getYear();int month=date.getMonth()+1;int length=0;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12: length=31; break;case 4:case 6:case 9:case 11: length=30; break;case 2:if((year%4==0)&&(year%100!=0)||(year%400==0))length=29;elselength=28;}int sun=0;int sat=0;for(int i=1;i<=length;i++){Date date1=new Date(year,month-1,i);int showWeek=date1.getDay();if(showWeek==0){ sun++;}if(showWeek==6){ sat++;}}System.out.println("星期天数:"+sun);System.out.println("星期六天数:"+sat);System.out.println("length:"+length);}

时间: 2024-08-31 02:38:41

java 求某个月中星期天的个数 算法的相关文章

java求一个如何切分多个时间段算法

问题描述 java求一个如何切分多个时间段算法 例如现在有时间 5.13-10.1 5.3-6.1 6.1-6.2 怎么能变成 5.3-5.13 5.13-6.1 6.1-6.2 解决方案 先按照 杠 把所有日期拆分出来,然后按照你的规则排序,然后从第二个开始,到倒数第二个,每个和它前面及后面的组成一组

指针-在C中求char* s[]={};数组元素的个数算法

问题描述 在C中求char* s[]={}:数组元素的个数算法 在C中求char* s[]={"key1=value1","key2= value2","key3 =value3 "}中s数组元素的个数 如,在这个指针数组中元素个数为3: 用什么算法可以算出3: 我用sizeof(s)/sizeof(**s),这个得出值为12 解决方案 首先你要弄清楚这是个数组,元素类型是char *指针. 然后两种方式: 1. sizeof(s) / size

求java中常用的加密、解密算法?

问题描述 求java中常用的加密.解密算法? 页面提交的密码.电话等信息通常需要加密后存放到数据库里,在个人信息展示时通常需要进行解密,如何实现?求案例或者思路. 解决方案 常用加密解密算法java常用的加密,解密,数字签名等APIJava Cipher类 DES算法(加密与解密) 解决方案二: 这个其实在百度里搜一下,到处都有答案,现提供一个参考文章:http://www.blogjava.net/amigoxie/archive/2014/07/06/415503.html 解决方案三: h

java算法-求大神 大哥优化java 求N的阶乘

问题描述 求大神 大哥优化java 求N的阶乘 ackage cn.zmx; public class Multiply { /** * 这个默认构造方法不能省略,因为有了带参数的构造方法后,类在实例化过程中就 * 不会再创建默认的缺省构造方法. * 类没有提供任何构造函数,将自动生成一个默认构建函数. * 但如果有构造函数,则不会自动生成该默认构造函数. */ public Multiply(){ } public Multiply(int x) { this.setX(x); } priva

java求双色球模拟要有JFrame窗口的代码加设计思路

问题描述 java求双色球模拟要有JFrame窗口的代码加设计思路 求双色球模拟要有JFrame窗口的代码加设计思路.求算法简单点的,万分感谢 解决方案 红球1-33,随机选6个,蓝球1-16随机选一个,就是一个随机数吧,有什么具体的要求么.

代码-如何在JAVA中打印显示出R语言算法的结果

问题描述 如何在JAVA中打印显示出R语言算法的结果 如题:我需要在Java上调用R的代码,R代码如下:data.frame(obs = c(1 2 3) treat = c('A' 'B' 'A') weight = c(2.3 NA 9)).R上显示结果如下: obs treat weight1 1 A 2.32 2 B NA3 3 A 9.0 怎么将这个结果 在Java中打印出来啊.. 求大神. 解决方案 http://blog.csdn.net/hwssg/article/details

解密随机数生成器(二)——从java源码看线性同余算法

Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术的3.2.1节) 如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的 也可以调用Math.random()生成随机数 Random实例是线程安全的,但是并发使用Random实例会影响效率,可以考虑使用java.util.concurrent.ThreadL

rjava-如何在JAVA中打印显示出R语言算法的结果

问题描述 如何在JAVA中打印显示出R语言算法的结果 如题: R代码如下: library(e1071) permutations(3) R下的显示结果如下 [,1] [,2] [,3] [1,] 1 2 3 [2,] 2 1 3 [3,] 2 3 1 [4,] 1 3 2 [5,] 3 1 2 [6,] 3 2 1 Java 中调用R代码如下: re.eval("library(e1071)"); re.eval("permutations(5)"); Syste

Java求素数和最大公约数的简单代码示例_java

Java小例子:求素数 素数(质数)指的是不能被分解的数,除了 1 和它本身之外就没有其它数能够整除.这里是一个小例子,说明如何求取十万以内的所有素数.   素数的分布没有规律可言,所以要检验一个数是不是素数,就必须将它同所有小于它的数作除法.不过有一个简便的方法,就是不需要检验所有小于它的数,而只要检验所有小于它的素数.如果所有小于它的素数都不能将其整除,那么它就是素数. public class Primes { public static void main(String[] args)