java如何得到指定日期月的第几周?按每年的1号为第一周开始算。

例如201901月1号是周2,则1月第一周时间段为:20190101 至20190106,2018年12月31号是周一也算是19年的第一周

201901月28号是周1,则也算是2月份的第一周。 在线等 急!!! 谢谢各位大佬了

你第一问需要思考一下,你第二问日历类直接get即可!

第一问:

年末与年初进行周与周重叠的时候,获取的是第二年的第一周数字,这个时候其实很简单,因为月份是绝对不相同的对不?

直接判断月份即可,头年月份肯定不会第二年月份想等,在同时判断一下,周是否为1,条件同时达到,就叠加52即可!

截个图,你参照日历看一下,分毫不差:

追问

但是老哥,我要的是那些临界值比如20190128-20190203这个时间段他都是属于2月份的第一周,1月份28号到31号不算是1月份的范围内了。跨年的时候也是,20181231也算是19年的第一周。 能再帮我看看吗 谢谢

追答

你这问题,看的好费劲,哈哈……
我明白了,其实这也不难
有一个东西是不变的,就是年中的第几周!
比如1月28,与2月03同属年中第五周,周相同,就判断月份,
月份不同就开始偏移,偏移单位用天进行偏移,比如你输入的是1月30号,那就循环左偏移,条件是跳出年中第五周就break,然后记录这一天

然后右偏移,一周,也就是到达第六周,break,记录这一天,取这两个偏移记录的中间值,就是你需要的东东了

在外面没时间测试,应该没问题!

追问

能发下源码吗?谢谢

追答

我把核心都给你了啊,代码的话,我没写!忙着的呢………

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-23
我是这样想的:
(例如现在是2月)先获取2月1日为星期X。
然后获取今天是2月y日
用x+(y-1)/7 就能得到今天是2月的第几周

以下是代码:
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Date {
static Calendar calendar = Calendar.getInstance();
static int year,month,day; //分别代表年,月,日
static int date; //最终结果为:是month月的第date周

public static void main(String[] args){
year = calendar.get(Calendar.YEAR); /*获取今天是几年几月几日
month = calendar.get(Calendar.MONTH)+1; *(可将其直接赋值为所需判断日期)
day = calendar.get(Calendar.DATE)-1; */

String week = getDayOfWeekByDate(year+"-0"+month+"-01");
//调用方法获取本月的一日是星期几

if(week.equals("星期一"))
date=1;
if(week.equals("星期二"))
date=2;
if(week.equals("星期三"))
date=3;
if(week.equals("星期四"))
date=4;
if(week.equals("星期五"))
date=5;
if(week.equals("星期六"))
date=6;
if(week.equals("星期七"))
date=7;

date+=day;
date/=7; //应为是整数类,所以不会出现浮点数
System.out.print("今天是"+month+"月的第"+date+"周\n");
System.out.print("今天是"+getDayOfWeekByDate(year+"-0"+month+"-0"+(day+1))+"\n");

}
//获取指定时间是星期几

public static String getDayOfWeekByDate(String date) {

String dayOfweek = "-1";
try {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date myDate = myFormatter.parse(date);
SimpleDateFormat formatter = new SimpleDateFormat("E");
String str = formatter.format(myDate);
dayOfweek = str;
} catch (Exception e) {
System.out.println(e.getMessage());
}
return dayOfweek;

}

}追问

可我要的是那些临界值比如20190128-20190203这个时间段他都是属于2月份的第一周,1月份28号到31号不算是1月份的范围内了。跨年的时候也是,20181231也算是19年的第一周。 能再帮我看看吗 谢谢

相似回答