比如2005年,第10周,是 2005-2-1至2005-1-8号,我就是想得到这前后两个数值日期.如何计算!!!! //获取当前日期是某年第几周期;
public static int getWeekNo(String weekValues) {
int weekno = 0;
GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.
getInstance();
SimpleDateFormat date_form = new SimpleDateFormat("yyyy-MM-dd");
String s_date = weekValues; try {
java.util.Date this_date = date_form.parse(s_date);
calendar.setTime(this_date);
weekno = (calendar.get(GregorianCalendar.WEEK_OF_YEAR)); //星期天为1,依次类推,同样可以获得DAY_OF_YEAR,DAY_OF_MONTH 之类,可查看API。 }
catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
return weekno;
}}
public static int getWeekNo(String weekValues) {
int weekno = 0;
GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.
getInstance();
SimpleDateFormat date_form = new SimpleDateFormat("yyyy-MM-dd");
String s_date = weekValues; try {
java.util.Date this_date = date_form.parse(s_date);
calendar.setTime(this_date);
weekno = (calendar.get(GregorianCalendar.WEEK_OF_YEAR)); //星期天为1,依次类推,同样可以获得DAY_OF_YEAR,DAY_OF_MONTH 之类,可查看API。 }
catch (Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
return weekno;
}}
calendar.add(GregorianCalendar.DATE, dateOfWeekEnd);
System.out.println(calendar.getTime().toString());//结束日期
calendar.add(GregorianCalendar.DATE, -7);
System.out.println(calendar.getTime().toString());//开始日期抢分,没有经过什么测试,大致上就是这个思路.自己试一下.
SimpleDateFormat date_form = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date this_date = date_form.parse("2005-08-06");
//2005-08-06就是你传到getWeekNo(String weekValues)里的参数 weekValues.GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar
.getInstance();
calendar.setTime(this_date);
import java.util.Date;
import java.text.*;public class WeekRange {
public WeekRange() {
} public static void main(String[] args) {
GregorianCalendar gc = new GregorianCalendar();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
int year = 2005; //年份
int cycle = 7; //定义的周期长度
int howmany = 10; //定义有多少个周期
Date date = new Date();
date.setYear(2005 - 1900);
date.setMonth(0);
date.setDate(1);
System.out.println(df.format(date));
gc.setTime(date);
gc.add(GregorianCalendar.DAY_OF_YEAR, cycle * howmany);
String end = df.format(gc.getTime());
gc.add(GregorianCalendar.DAY_OF_YEAR,0-cycle);
String begin=df.format(gc.getTime());
System.out.println(year+"第"+howmany+"个"+cycle+"天从"+begin+"开始到"+end+"结束");
}}
后的时间是该周期的星期几,那么就可以知道范围了。
楼主有没有运行试试?//下面这句得到的是那一周的周末的日期, 比如calendar的日期是 2005-08-06 ,
//calendar.get(GregorianCalendar.DAY_OF_WEEK)的值就是7.注意: 我在我的机器上得出的结果是7
//, 周六被当成了一周的第七天, 周日被当成第一天. 所以下面的代码结果不正确.
//dateOfWeekEnd 计算出calendar的日期和周末的差距(天数).int dateOfWeekEnd = (calendar.get(GregorianCalendar.DAY_OF_WEEK) == 7)? (0):(7 - calendar.get(GregorianCalendar.DAY_OF_WEEK));
//这句的意思是把calendar的日期加上 dateOfWeekEnd ,就是周末的日期
calendar.add(GregorianCalendar.DATE, dateOfWeekEnd);
System.out.println(calendar.getTime().toString());//结束日期//这句的意思自己想想.
calendar.add(GregorianCalendar.DATE, -7);
System.out.println(calendar.getTime().toString());//开始日期思路就像上面一样.如果你想不出来, 干脆再开个贴多给点分, 会有更多更全面正确的代码给你.
int w = d.getDay();
Date start = new Date(d.getYear(), d.getMonth(), d.getDate() - w);
Date end = new Date(d.getYear(), d.getMonth(), d.getDate() + 6 - w);
System.out.println(start);
System.out.println(end);
下面这个函数getstartend能完全满足你的要求
import java.util.Calendar;public class aaa { public static Calendar[] getstartend(int year, int weeknum) {
/*参数说明
* int year 年分 例如 2005
* int weeknum 第几周 例如33
* 返回一个Calendar数组,长度为2
* 分别是开始日期和结束日期
*/
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, weeknum);
int nw = cal.get(Calendar.DAY_OF_WEEK);
Calendar start = (Calendar) cal.clone();
Calendar end = (Calendar) cal.clone();
start.add(Calendar.DATE, 1 - nw);
end.add(Calendar.DATE, 7 - nw);
Calendar[] darr = { start, end };
return darr;
} public static String getFullTimeStr(Calendar d) {
return d.get(Calendar.YEAR) + "-" + (d.get(Calendar.MONTH) + 1) + "-"
+ d.get(Calendar.DATE);
} public static void main(String[] args) {
try {
Calendar[] darr = getstartend(2005, 33);
System.out.println(getFullTimeStr(darr[0]) + "\n"
+ getFullTimeStr(darr[1])); } catch (Exception e) {
e.printStackTrace();
}
}
}