package com.ly.tool.date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* YearlyDate
*
* @author Morningstar
* @version 1.0
* 2021/12/31 15:32
*
**/
public class YearlyDate {
/**
* 计算全年的日期
* @param year
* @return
*
*/
public static ArrayList<String> GetDate(int year){
ArrayList<String> dateList = new ArrayList<>();
for(int mon = 1;mon<13;mon++){
int month=mon;
int day=0;
//第二步:求输入的年份月份与1900年1月1日相隔的总天数
for (int i = 1900; i < year; i++) {
if ((i % 4 == 0 && i % 100 != 0)||(i % 400 == 0)) {
day+=366;
}else {
day+=365;
}
}
//求相隔月份的天数
for (int i = 1; i < month; i++) {
if (i==2) {
if ((year%4==0&&year%100!=0)||(year%400==0)) {
day+=29;
}else {
day+=28;
}
}else if (i==4||i==6||i==9||i==11) {
day+=30;
}else {
day+=31;
}
}
//第三步:计算上个月最后一天是星期几
int weeks=day%7;
int day2=0;
switch (month) {
case 2:
if (year%4==0&&year%100!=0||year%400==0) {
day2+=29;
}else {
day2+=28;
}
break;
case 4:
case 6:
case 9:
case 11:
day2=30;
break;
default:
day2=31;
break;
}
//第四部:打印日历
for (int i = 1; i <= weeks; i++) {
}
for (int i = 1; i <= day2; i++) {
String sdate=year+"-"+mon+"-"+i;
dateList.add(sdate);
if ((i+weeks)%7==0) {
}
}
}
return dateList;
}
/**
* 计算某一天是周几
* @param pTime
* @return
* 格式为2018-01-01
* 如果错误就返回0
*/
public static int dayForWeek(String pTime){
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date tmpDate = format.parse(pTime);
Calendar cal = Calendar.getInstance();
// String[] weekDays = { "7", "1", "2", "3", "4", "5", "6" };
int [] weekDays = {7,1,2,3,4,5,6};
try {
cal.setTime(tmpDate);
} catch (Exception e) {
e.printStackTrace();
}
int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
if (w < 0) {
w = 0;
}
return weekDays[w];
}catch (Exception e){
e.printStackTrace();
return 0;
}
}
/**
* 把一年的周一到周日封装到一个list里面
* 顶层list里面有7个list,从周一到周日排列
* @param year
* @return
*/
public static List<List<String>> getYearWeek(int year) {
//获取到某年的所有的日期
//1900年1月1日相隔的总天数
ArrayList<String> dateList = GetDate(year);
ArrayList<String> MondayList = new ArrayList<>();
ArrayList<String> TuesdayList = new ArrayList<>();
ArrayList<String> WednesdayList = new ArrayList<>();
ArrayList<String> ThursdayList = new ArrayList<>();
ArrayList<String> FridayList = new ArrayList<>();
ArrayList<String> SaturdayList = new ArrayList<>();
ArrayList<String> SundayList = new ArrayList<>();
//判断每天是周几
dateList.forEach(s -> {
try {
int i= dayForWeek(s);
// System.out.println(s+"周"+CalculationDate.dayForWeek(s));
if (i==1){
MondayList.add(s);
return;
}
if (i==2){
TuesdayList.add(s);
return;
}
if (i==3){
WednesdayList.add(s);
return;
}
if (i==4){
ThursdayList.add(s);
return;
}
if (i==5){
FridayList.add(s);
return;
}
if (i==6){
SaturdayList.add(s);
return;
}
if (i==7){
SundayList.add(s);
return;
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
});
ArrayList<List<String>> lists = new ArrayList<>();
lists.add(MondayList);
lists.add(TuesdayList);
lists.add(WednesdayList);
lists.add(ThursdayList);
lists.add(FridayList);
lists.add(SaturdayList);
lists.add(SundayList);
return lists;
}
/**
* 获取两个日期之间的所有日期
*
* @param startTime
* 开始日期 格式2018-01-01
* @param endTime
* 结束日期 格式2018-01-01
* @return
*/
public static List<String> getDays(String startTime, String endTime) {
// 返回的日期集合
List<String> days = new ArrayList<String>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date start = dateFormat.parse(startTime);
Date end = dateFormat.parse(endTime);
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
while (tempStart.before(tempEnd)) {
days.add(dateFormat.format(tempStart.getTime()));
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
return days;
}
}
日历工具类,计算某年的周一到周日,计算某天是周几
最新推荐文章于 2024-11-15 18:38:47 发布
这个Java类库实现了计算全年日期、确定日期是周几、按周组织一年的日期等功能。通过GetDate方法获取指定年份的所有日期,dayForWeek方法计算日期对应的星期,getYearWeek方法将一年的日期按周归类。
摘要由CSDN通过智能技术生成