java获取一年共有多少周

java获取一年共有多少周,第1张

计算一年有多少个周的思路:首先,每年至少有52个周,至多有53个周,取决于周一是在哪年(也可以定位周日,这个是由需求决定的),以下是详细代码,其中判断哪一天决定了当周是属于哪一年的逻辑是写在getYearWeekEndDay中。

/

返回指定年度的所有周。List中包含的是String[2]对象<br>

string[0]本周的开始日期,string[1]是本周的结束日期。<br>

日期的格式为yyyy-MM-dd。<br>

每年的第一个周,必须包含星期一且是完整的七天。<br>

例如:2009年的第一个周开始日期为2009-01-05,结束日期为2009-01-11。 <br>

星期一在哪一年,那么包含这个星期的周就是哪一年的周。<br>

例如:2008-12-29是星期一,2009-01-04是星期日,哪么这个周就是2008年度的最后一个周。<br>

@param year 格式 yyyy ,必须大于1900年度 小于9999年

@return

/

public static List<String[]> getWeeksByYear(final int year){

if(year<1900 || year >9999){

throw new NullPointerException("年度必须大于等于1900年小于等于9999年");

}

//实现思路,首先计算当年有多少个周,然后找到每个周的开始日期和结束日期

// Calendar calendar = new GregorianCalendar();

// // 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。

// calendarsetFirstDayOfWeek(CalendarMONDAY); //设置每周的第一天为星期一

// calendarset(CalendarDAY_OF_WEEK, CalendarMONDAY); //每周从周一开始

// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。

// calendarsetMinimalDaysInFirstWeek(7); //设置每周最少为7天

// calendarset(CalendarYEAR, year); // 设置年度为指定的年

// //首先计算当年有多少个周,每年都至少有52个周,个别年度有53个周

int weeks = getWeekNumByYear(year);

// Systemoutprintln(year+"共有"+weeks+"个周");

List<String[]> result = new ArrayList<String[]>(weeks);

for(int i=1;i<=weeks;i++){

String[] tempWeek = new String[2];

tempWeek[0] = getYearWeekFirstDay(year,i);

tempWeek[1] = getYearWeekEndDay (year,i);

//或者使用下面的代码,不过发现效率更低

// tempWeek[0] = getDateAdd(firstWeekDay,(i-1)7+0);

// tempWeek[1] = getDateAdd(firstWeekDay,(i-1)7+6);

resultadd(tempWeek);

// Systemoutprintln(i+"="+tempWeek[0]+"_"+tempWeek[1]);

}

return result;

}

/

计算指定年度共有多少个周。

@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(datesubstring(0, 4)equals(year+"")){ //判断年度是否相符,如果相符说明有53个周。

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) {

if(yearNum<1900 || yearNum >9999){

throw new NullPointerException("年度必须大于等于1900年小于等于9999年");

}

Calendar cal = CalendargetInstance();

calsetFirstDayOfWeek(CalendarMONDAY); //设置每周的第一天为星期一

calset(CalendarDAY_OF_WEEK, CalendarMONDAY);//每周从周一开始

// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。

calsetMinimalDaysInFirstWeek(7); //设置每周最少为7天

calset(CalendarYEAR, yearNum);

calset(CalendarWEEK_OF_YEAR, weekNum);

//分别取得当前日期的年、月、日

return getFormatDate(calgetTime());

}

/

计算某年某周的结束日期

@param yearNum 格式 yyyy ,必须大于1900年度 小于9999年

@param weekNum 1到52或者53

@return 日期,格式为yyyy-MM-dd

/

public static String getYearWeekEndDay(int yearNum,int weekNum) {

if(yearNum<1900 || yearNum >9999){

throw new NullPointerException("年度必须大于等于1900年小于等于9999年");

}

Calendar cal = CalendargetInstance();

calsetFirstDayOfWeek(CalendarMONDAY); //设置每周的第一天为星期一

calset(CalendarDAY_OF_WEEK, CalendarSUNDAY);//每周从周一开始

// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。

calsetMinimalDaysInFirstWeek(7); //设置每周最少为7天

calset(CalendarYEAR, yearNum);

calset(CalendarWEEK_OF_YEAR, weekNum);

return getFormatDate(calgetTime());

}

List<String> list = new ArrayList<String>();

listadd("2012-11-01 12:12:20");

listadd("2012-11-01 12:13:20");

listadd("2012-11-01 12:10:20");

listadd("2012-10-31 12:14:20");

listadd("2012-11-01 11:14:20");

Systemoutprintln(ArraystoString(listtoArray()));

Date later = null;

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

for(String date:list){

try{

if(later == null){

later = sdfparse(date);

}else{

if(laterbefore(sdfparse(date))){

later = sdfparse(date);

}

}

}catch(Exception e){

eprintStackTrace();

}

}

Systemoutprintln(sdfformat(later));

楼主我这方法都拆开了,应该还算比较好理解。。。也有注释

======================================================================

import javatextParseException;

import javatextSimpleDateFormat;

import javautilCalendar;

import javautilDate;

import javautilGregorianCalendar;

public class WeekToDay {

public static void main(String[] args) {

String date = "2012-12-01";

String[] a;

try {

a = getStringDate(date);

for(String k : a){

Systemoutprintln(k);

}

} catch (ParseException e) {

eprintStackTrace();

}

}

public static String[] getStringDate(String date) throws ParseException{

String[] weeks = new String[7];//返回的这周的日期

String[] a = datesplit("-");

int week = getDayOfWeek(a[0], a[1], a[2]);//获取周几

int minWeek = 0;

int maxWeek = 7;

String format = "yyyy-MM-dd";

if(week == 1){//如果是周日(老外是从周日开始算一周,所以有点恶心)

weeks[6] = date;

for(int i = 5; i >= 0; i--){

weeks[i] = getFormatDateAdd(getStrToDate(date, format), -1, format);

date = weeks[i];

}

}else{

int temp = week - 2;

weeks[temp] = date;

for(int i = temp - 1; i >= minWeek; i--){

weeks[i] = getFormatDateAdd(getStrToDate(date, format), -1, format);

date = weeks[i];

}

date = weeks[temp];

for(int i = temp + 1; i < maxWeek; i++){

weeks[i] = getFormatDateAdd(getStrToDate(date, format), 1, format);

date = weeks[i];

}

}

return weeks;

}

/

根据指定的年、月、日返回当前是星期几。1表示星期天、2表示星期一、7表示星期六。

@param year

@param month

month是从1开始的12结束

@param day

@return 返回一个代表当期日期是星期几的数字。1表示星期天、2表示星期一、7表示星期六。

/

public static int getDayOfWeek(String year, String month, String day) {

Calendar cal = new GregorianCalendar(new Integer(year)intValue(),

new Integer(month)intValue() - 1, new Integer(day)intValue());

return calget(CalendarDAY_OF_WEEK);

}

/

取得给定日期加上一定天数后的日期对象

@param date

给定的日期对象

@param amount

需要添加的天数,如果是向前的天数,使用负数就可以

@param format

输出格式

@return Date 加上一定天数以后的Date对象

/

public static String getFormatDateAdd(Date date, int amount, String format) {

Calendar cal = new GregorianCalendar();

calsetTime(date);

caladd(GregorianCalendarDATE, amount);

return getFormatDateTime(calgetTime(), format);

}

/

根据给定的格式与时间(Date类型的),返回时间字符串。最为通用。<br>

@param date

指定的日期

@param format

日期格式字符串

@return String 指定格式的日期字符串

/

public static String getFormatDateTime(Date date, String format) {

SimpleDateFormat sdf = new SimpleDateFormat(format);

return sdfformat(date);

}

/

返回制定日期字符串的date格式

@param date

@param format

@return

@throws ParseException

/

public static Date getStrToDate(String date, String format) throws ParseException{

SimpleDateFormat sdf = new SimpleDateFormat(format);

return sdfparse(date);

}

}

package comrxlamozhidao;

import javatextSimpleDateFormat;

import javautilCalendar;

public class Test {

    public static void main(String[] args) {

        // 获取离当前日期最近的一个星期天

        getLastSunday();

    }

    /

      获取离当前日期最近的一个星期天

     /

    public static void getLastSunday() {

        // 获取当前日期

        Calendar calendar = CalendargetInstance();

        // 距离上个周日的差值

        long diffTime = 0L;

        // 今天星期几,注:此处周日 = 1 ,周一 = 2 。。。。

        int dayOfWeek = calendarget(CalendarDAY_OF_WEEK);

        Systemoutprintln("toady:" + dayOfWeek);

        // 如果今天是周日,看需求,是取今天的,还是取上周的

        if (dayOfWeek == 1){

            // 取今天

             // dayOfWeek = 1;

            // 取上周

            dayOfWeek = 8;

        }

        // 计算当前时间距离上周日的时差,此处一周的开始从周日算起,根据需要

        diffTime = (dayOfWeek - 1 )  24  60  60  1000;

        calendarsetTimeInMillis(SystemcurrentTimeMillis() - diffTime);

        //

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Systemoutprintln("lastSunday:" + dateFormatformat(calendargetTime()));

        // 如果一周的开始从周一计算,并且请注释掉上面的  if (dayOfWeek == 1) 处判断,需要重新判断

        if (dayOfWeek == 1){

            // 取今天

            // dayOfWeek = 0;

            // 取上周

            dayOfWeek = 7;

        }

        diffTime = dayOfWeek  24  60  60  1000;

        calendarsetTimeInMillis(SystemcurrentTimeMillis() - diffTime);

        Systemoutprintln("lastSunday:" + dateFormatformat(calendargetTime()));

    }

}

有不明白在问我

以上就是关于java获取一年共有多少周全部的内容,包括:java获取一年共有多少周、如何在java获取一组时间列表的最近时间(for循环输出的一组时间)、java 怎么根据一天的时间得到一周的时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9672424.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存