我的理解是如果输入的星期等于当前日期的星期数,那么返回下一个周对应星期数的日期,否则返回当前日期往后最近的一个匹配的星期数的日期。如果我的理解没问题的话下面代码就能满足你的要求:
import javautilCalendar;import javautilDate;
public class Main {
public static void main(String[] args) {
Systemoutprintln(getDateByWeek(2));
}
/
根据星期获取日期
@param week 星期几 1代码星期日,2代表星期一。。。7代表星期六
@return
/
public static Date getDateByWeek(int week) {
int targetWeek = week;
Calendar c = CalendargetInstance();
// 当前日期星期数
int currWeek = cget(CalendarDAY_OF_WEEK);
if (currWeek == targetWeek) {
// 如果所给星期数和当前日期星期数相等则向后推7天
cadd(CalendarDAY_OF_MONTH, 7);
return cgetTime();
}
do {
// 向后推一天,直到星期数与所给星期数相同
cadd(CalendarDAY_OF_MONTH, 1);
} while (targetWeek != cget(CalendarDAY_OF_WEEK));
return cgetTime();
}
}
//一个简单的日期计算程序
import javautil;
import javatext;
public class DateCalculator
{
Date standardDate;
DateFormat mf = new SimpleDateFormat( "yyyyMMdd ");
Calendar cal = CalendargetInstance();
Calendar cal_temp = CalendargetInstance();
public DateCalculator()
{
try{
standardDate = mfparse( "20000101 ");
}
catch(ParseException ep){
epprintStackTrace();
}
}
//设置基本日期,使用 "yyyyMMdd "格式的字符串
public boolean setStandardDate(String str)
{
Date date;
try{
date = mfparse(str);
}
catch(ParseException ep){
epprintStackTrace();
return false;
}
standardDate = date;
return true;
}
public boolean setStandardDate(Date date)
{
standardDate = getOnlyDate(date);
return true;
}
//year 为年数
//month 为月份,以 0 开始,与系统的不同,取值 0-11
//为的是与Java的内部使用兼容
//day 为日期天数
public boolean setStandardDate(int year,int month,int day)
{
calclear();
calset(year,month,day);
standardDate = calgetTime();
return true;
}
public boolean setStandardDate(long time)
{
standardDate = getOnlyDate(time);
return true;
}
public Date getStandardDate()
{
return standardDate;
}
//取得一个只有日期,不含有时间的日期,也就是时间是 0时 0分 0秒
public Date getOnlyDate(Date date)
{
calsetTime(date);
cal_tempclear();
cal_tempset(calget(CalendarYEAR),calget(CalendarMONTH),calget(CalendarDAY_OF_MONTH));
return cal_tempgetTime();
}
public Date getOnlyDate(long time)
{
calsetTimeInMillis(time);
cal_tempclear();
cal_tempset(calget(CalendarYEAR),calget(CalendarMONTH),calget(CalendarDAY_OF_MONTH));
return cal_tempgetTime();
}
//使用一个字符串取得一个日期,样式 "yyyyMMdd "格式的字符串
public Date getDate(String str)
{
Date date;
try{
date = mfparse(str);
}
catch(ParseException ep){
epprintStackTrace();
return getOnlyDate(new Date());
}
return date;
}
//使用输入的日期减去标准日期,得到相差的天数
public int sub(Date date)
{
long temp = dategetTime()-standardDategetTime();
if(temp> 0)
{
return (int)(temp/(2460601000));
}
else
{
return (int)(temp/(2460601000))-1;
}
}
//使用 b_date - j_date 得到相差的天数
public int sub(Date b_date , Date j_date)
{
Date date = getOnlyDate(j_date);
long temp = b_dategetTime()-dategetTime();
if(temp> 0)
{
return (int)(temp/(2460601000));
}
else
{
return (int)(temp/(2460601000))-1;
}
}
//得到标准日期减去几天后的日期
public Date add(int day)
{
calsetTime(standardDate);
caladd(CalendarDATE,day);
return calgetTime();
}
//得到 date 减去几天后的日期
public Date add(Date date , int day)
{
calsetTime(date);
caladd(CalendarDATE,day);
return calgetTime();
}
public static void main(String args[])
{
DateCalculator temp = new DateCalculator();
Date d = tempgetDate( "20030101 ");
int i = tempsub(new Date(),d);
Systemoutprintln (i);
}
}
思路:首先是获取该月的实际天数,然后从1号遍历直至该月最后一天,利用Calendar类找出该日是一周中的第几天,
(1)若该日是周日,则视为一周结束,并用该日期减去6找到该周的开始日期,若相减结果小于等于1,则说明该周起始日期应该是本月1号。
(1)若该日不是周日,且是该月最后一天,则应该在上面计算的基础上再加一周,视月末为该周的结束日,该周起始日期应为改日期减去改日
在一周中的位置加2,例如:2013-09-30号是周一,则视为9月份中的第六周,开始日期是30-2+2
提示:Calendar 类中视周日为一周的开始,值是1
示例代码:
[java] view plain copy
public static void printfWeeks(String date) throws Exception {
// String date = "2013-09";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
Date date1 = dateFormatparse(date);
Calendar calendar = new GregorianCalendar();
calendarsetTime(date1);
int days = calendargetActualMaximum(CalendarDAY_OF_MONTH);
Systemoutprintln("days:" + days);
int count = 0;
for (int i = 1; i <= days; i++) {
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Date date2 = dateFormat1parse(date + "-" + i);
calendarclear();
calendarsetTime(date2);
int k = new Integer(calendarget(CalendarDAY_OF_WEEK));
if (k == 1) {// 若当天是周日
count++;
Systemoutprintln("-----------------------------------");
Systemoutprintln("第" + count + "周");
if (i - 6 <= 1) {
Systemoutprintln("本周开始日期:" + date + "-" + 1);
} else {
Systemoutprintln("本周开始日期:" + date + "-" + (i - 6));
}
Systemoutprintln("本周结束日期:" + date + "-" + i);
Systemoutprintln("-----------------------------------");
}
if (k != 1 && i == days) {// 若是本月最好一天,且不是周日
count++;
Systemoutprintln("-----------------------------------");
Systemoutprintln("第" + count + "周");
Systemoutprintln("本周开始日期:" + date + "-" + (i - k + 2));
Systemoutprintln("本周结束日期:" + date + "-" + i);
Systemoutprintln("-----------------------------------");
}
}
}
测试代码:
[java] view plain copy
public static void main(String[] args) throws Exception {
String s = "2013-";
for (int i = 1; i <= 12; i++) {
Systemoutprintln("");
Systemoutprintln("月份:" + i);
printfWeeks(s + i);
Systemoutprintln("");
}
// printfWeeks(s + 2);
}
以上就是关于java 根据所填写的星期数获取日期全部的内容,包括:java 根据所填写的星期数获取日期、java学期周数的计算,求算法、java中如何计算本周开始和结束的日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)