java 根据所填写的星期数获取日期

java 根据所填写的星期数获取日期,第1张

我的理解是如果输入的星期等于当前日期的星期数,那么返回下一个周对应星期数的日期,否则返回当前日期往后最近的一个匹配的星期数的日期。如果我的理解没问题的话下面代码就能满足你的要求:

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中如何计算本周开始和结束的日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10147663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存