当前位置: 代码迷 >> Java相关 >> [求助]如何返回一年中所有是星期三的所有日期
  详细解决方案

[求助]如何返回一年中所有是星期三的所有日期

热度:85   发布时间:2007-10-09 21:31:08.0
[求助]如何返回一年中所有是星期三的所有日期
如何返回一年中所有是星期三的所有日期

用Calendar 没想到合适的方法啊

各位帮帮忙 Calendar 有没有方法实现?
搜索更多相关的解决方案: Calendar  

----------------解决方案--------------------------------------------------------

可以给gregoriancalendar赋值第一年的第一天然后取出Day of week字段的值判断是否属于星期三,然后add()calendar的字段day的值,再判断!!!
这个循环直到最后一天!!!


----------------解决方案--------------------------------------------------------

一会试一下

刚才用了一种很笨的方法
package test;
import java.util.Calendar;

public class test_b {
public test_b() {
}
public static void main(String args[]){
int[] month={31,28,31,30,31,30,31,31,30,31,30,31};
int i,tmp,temp;
int begin=1; //这一年的第一天是星期几
int key=3; //要输出星期几的日期
for(i=0;i<month.length;i++){
temp=month[i];
if(begin<=key){
tmp=key-begin+1;
}else{
tmp=7-key+4;
}
System.out.println(i+1+"月"+tmp+"日");
tmp=tmp+7;
while(tmp<=month[i]){
System.out.println(i+1+"月"+tmp+"日");
tmp=tmp+7;
}
key=tmp-month[i]; // 设置下个月的第一天是星期几?
}
}
}


----------------解决方案--------------------------------------------------------
可以简化一下代码:
public class Test_b {
public void test_b() {
}
public static void main(String args[]){
int[] month={31,28,31,30,31,30,31,31,30,31,30,31};
int i,tmp;
int begin=1; //这一年的第一天是星期几
int key=3; //要输出星期几的日期
for(i=0;i<month.length;i++){
if(begin<=key){
tmp=key-begin+1;
}else{
tmp=7-key+4;
}
System.out.println(i+1+"月"+tmp+"日");
tmp=tmp+7;
while(tmp<=month[i]){
System.out.println(i+1+"月"+tmp+"日");
tmp=tmp+7;
}
key=tmp-month[i]; // 设置下个月的第一天是星期几?
}
}
}

[此贴子已经被作者于2007-10-10 23:57:29编辑过]


----------------解决方案--------------------------------------------------------
以下是引用HK狼在2007-10-9 22:09:17的发言:

一会试一下

刚才用了一种很笨的方法
package test;
import java.util.Calendar;

public class test_b {
public test_b() {
}
public static void main(String args[]){
int[] month={31,28,31,30,31,30,31,31,30,31,30,31};
int i,tmp,temp;
int begin=1; //这一年的第一天是星期几
int key=3; //要输出星期几的日期
for(i=0;i<month.length;i++){
temp=month[i];
if(begin<=key){
tmp=key-begin+1;
}else{
tmp=7-key+4;
}
System.out.println(i+1+"月"+tmp+"日");
tmp=tmp+7;
while(tmp<=month[i]){
System.out.println(i+1+"月"+tmp+"日");
tmp=tmp+7;
}
key=tmp-month[i]; // 设置下个月的第一天是星期几?
}
}
}

即红色部分去掉
package test;
import java.util.Calendar
;

public class test_b {
public test_b() {
}
public static void main(String args[]){
int[] month={31,28,31,30,31,30,31,31,30,31,30,31};
int i,tmp,temp;
int begin=1; //这一年的第一天是星期几
int key=3; //要输出星期几的日期
for(i=0;i<month.length;i++){
temp=month[i];
if(begin<=key){
tmp=key-begin+1;
}else{
tmp=7-key+4;
}
System.out.println(i+1+"月"+tmp+"日");
tmp=tmp+7;
while(tmp<=month[i]){
System.out.println(i+1+"月"+tmp+"日");
tmp=tmp+7;
}
key=tmp-month[i]; // 设置下个月的第一天是星期几?
}
}
}


----------------解决方案--------------------------------------------------------
回头我也写个!!!


----------------解决方案--------------------------------------------------------
回复:(易水辰)可以简化一下代码:public class Tes...
if(begin<=key){
tmp=key-begin+1;
}else{
tmp=7-key+4;
}
以上代码可简化为:
tmp=key-begin+1;
因为begin的值为1;key的值只可能是>=1,不可能<1;
这与while的条件和temp=temp+7有关.

----------------解决方案--------------------------------------------------------

public class Days {

/**
* 根据输入的年份(year)和星期几(targetDate),返回该年份中所有为星期几的日期
* @param year
* @param targetDate
* @return 所有为星期几的日期的集合
*/
public static ArrayList<String> getDays(int year, int targetDate) {
ArrayList<String> days = new ArrayList<String>();

Calendar calendar = Calendar.getInstance();
// 第一天是星期天,因此星期三实际上是一个星期中的第四天
int target_date = targetDate + 1;

// 这一年有多少天
calendar.set(year, 11, 31);
int days_of_year = calendar.get(Calendar.DAY_OF_YEAR);

// 这一年中的第一天是星期几
calendar.set(year, 0, 1);
int first_date_of_the_year = calendar.get(Calendar.DAY_OF_WEEK);

// 第一个星期几是这一年中的第几天
int first_day_of_the_target;
if (first_date_of_the_year < target_date) {
first_day_of_the_target = target_date - first_date_of_the_year + 1;
} else if (first_date_of_the_year == target_date) {
first_day_of_the_target = 1;
} else {
first_day_of_the_target =
7 - first_date_of_the_year + target_date + 1;
}

// 把日期格式化存放在数组中,可以自定义格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
for (int i = first_day_of_the_target; i < days_of_year; i += 7) {
calendar.set(year, 0, i);
days.add(df.format(calendar.getTime()));
}

return days;
}

public static void main(String[] args) {
// 找出2007年所有为星期三的日期
System.out.println(getDays(2007, 3));
// 找出2008年所有为星期二的日期
System.out.println(getDays(2008, 2));
}
}


----------------解决方案--------------------------------------------------------
package test;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* 用java提供的类做
* @author haikuang
*/
public class test_a {

/** Creates a new instance of test_a */
public test_a() {
}
public static void main(String args[]){
Calendar rn=new GregorianCalendar();
rn.set(2007,0,1);
while(rn.get(Calendar.YEAR)==2007){
if(rn.get(Calendar.DAY_OF_WEEK)==4){//星期三
System.out.println(rn.get(Calendar.YEAR)+"/"+(rn.get(Calendar.MONTH)+1)+"/"+rn.get(Calendar.DAY_OF_MONTH));
}
rn.add(Calendar.DAY_OF_MONTH,1);
}
}
}
----------------解决方案--------------------------------------------------------
  相关解决方案