package com.timevale.utils;
import lombok.extern.slf4j.Slf4j;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.Year;
import java.util.*;
/**
* @author lingchen
* @since 2021-03-23 10:27
**/
@Slf4j
public class GainUtil {
//为负数表示前面,i为正数表示后面
public static Map<String,String> getWeekDays(Date date,Integer i){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar1 = Calendar.getInstance();
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
calendar1.setFirstDayOfWeek(Calendar.MONDAY);
// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
// 获得当前日期是一个星期的第几天
int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK);
if (1 == dayOfWeek) {
calendar1.add(Calendar.DAY_OF_MONTH, -1);
}
// 获得当前日期是一个星期的第几天
int day = calendar1.get(Calendar.DAY_OF_WEEK);
//获取当前日期前(下)x周同星几的日期
calendar1.add(Calendar.DATE, 7*i);
calendar1.add(Calendar.DATE, calendar1.getFirstDayOfWeek() - day);
String beginDate = sdf.format(calendar1.getTime());
calendar1.add(Calendar.DATE, 6);
String endDate = sdf.format(calendar1.getTime());
System.out.println(beginDate+" 到 "+endDate);
HashMap map = new HashMap(16);
map.put("beginDate",beginDate);
map.put("endDate",endDate);
return map;
}
/**
* 获取上一个自然月
* @param date
* @param i
* @return
*/
public static Map<String,String> getMonthDays(Date date,Integer i){
Calendar c=Calendar.getInstance();
c.add(Calendar.MONTH, i);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//上月
String gtimelast = sdf.format(c.getTime());
int lastMonthMaxDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);
c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);
//格式化输出
//xxx月第一天
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01");
String gtime1 = sdf2.format(c.getTime());
//xxx月最后一天
String gtime2 = sdf.format(c.getTime());
System.out.println(gtime1+"至"+gtime2);
HashMap map = new HashMap(16);
map.put("beginDate",gtime1);
map.put("endDate",gtime2);
return map;
}
/**
* * 获取某一月份的前六个月
* * @param date 日期,格式:"2018-10"
* * @return
*
*/
public static List<String> getSixMonth(String date) {
//返回值
List<String> list = new ArrayList<String>();
int month = Integer.parseInt(date.substring(5, 7)) -1;
int year = Integer.parseInt(date.substring(0, 4));
for (int i = 5; i >= 0; i--) {
if (month > 6) {
if (month - i >= 10) {
list.add(year + "-" + String.valueOf(month - i));
} else {
list.add(year + "-0" + String.valueOf(month - i));
}
} else {
if (month - i <= 0) {
if (month - i + 12 >= 10) {
list.add(String.valueOf(year - 1) + "-" + String.valueOf(month - i + 12));
} else {
list.add(String.valueOf(year - 1) + "-0" + String.valueOf(month - i + 12));
}
} else {
if (month - i >= 10) {
list.add(String.valueOf(year) + "-" + String.valueOf(month - i));
} else {
list.add(String.valueOf(year) + "-0" + String.valueOf(month - i));
}
}
}
}
return list;
}
/**
* 获取当前日期是星期几
*
* @param strDate
* @return 当前日期是星期几
*/
public static String getWeekOfDate(String strDate){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(strDate);
} catch (ParseException e) {
log.error("时间转换异常:{}",e);
e.printStackTrace();
}
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0) {
w = 0;
}
return weekDays[w];
}
/**
* 获取自然周所有日期
* @return
*/
public static List<String> getWeekdays() {
Calendar calendar = Calendar.getInstance();
Map<Integer,String> map = new HashMap<Integer,String>();
List<String> list = new ArrayList<String>();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
calendar.add(Calendar.DATE, -1);
map.put(0,dateFormat.format(calendar.getTime()));
}
for (int i = 0; i < 7; i++) {
map.put(i,dateFormat.format(calendar.getTime()));
calendar.add(Calendar.DATE, 1);
}
for (Integer key : map.keySet()) {
list.add(map.get(key));
}
return list;
}
/**
* 获取两个日期之间的所有日期
* @param startTime
* 开始日期
* @param endTime
* 结束日期
* @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);
// 日期加1(包含结束)
tempEnd.add(Calendar.DATE, +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;
}
/**
* 传入年和月,获取到本月的第一天:
* @param monthDate
* @return Date
*/
public static String getFirstDayOfMonth(String monthDate) {
Integer year = Integer.valueOf(monthDate.substring(0, 4));
Integer month = Integer.valueOf(monthDate.substring(5, 7));
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最小天数
int firstDay = cal.getMinimum(Calendar.DATE);
//设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH,firstDay);
//格式化日期
String firstDayOfMonth = DateUtil.formatDateTime(cal.getTime());
return firstDayOfMonth;
}
/**
* 传入年和月,获取到本月的最后一天
* @param monthDate
* @return
*/
public static String getLastDayOfMonth(String monthDate) {
Integer year = Integer.valueOf(monthDate.substring(0, 4));
Integer month = Integer.valueOf(monthDate.substring(5, 7));
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DATE);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
String endDayOfMonth = DateUtil.formatDateTime(cal.getTime());
return endDayOfMonth;
}
/**
* 根据月份获得第一天和最后一天
* @param monthDate
* @return
*/
public static Map<String,String> getFirstDayAndEndDayOfMonth(String monthDate){
//String s="2020-09";
Integer year = Integer.valueOf(monthDate.substring(0, 4));
Integer month = Integer.valueOf(monthDate.substring(5, 7));
Calendar cal1 = Calendar.getInstance();
//设置年份
cal1.set(Calendar.YEAR, year);
//设置月份
cal1.set(Calendar.MONTH, month-1);
//获取某月最小天数
int firstDay = cal1.getMinimum(Calendar.DATE);
//设置日历中月份的最小天数
cal1.set(Calendar.DAY_OF_MONTH,firstDay);
//格式化日期
String firstDayOfMonth = DateUtil.formatDateTime(cal1.getTime());
Calendar cal2 = Calendar.getInstance();
//设置年份
cal2.set(Calendar.YEAR, year);
//设置月份
cal2.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal2.getActualMaximum(Calendar.DATE);
//设置日历中月份的最大天数
cal2.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
String endDayOfMonth = DateUtil.formatDateTime(cal2.getTime());
HashMap map = new HashMap(16);
map.put("firstDayOfMonth",firstDayOfMonth);
map.put("lastDayOfMonth",endDayOfMonth);
return map;
}
public static void main(String[] args) throws ParseException {
/* List<String> weekdays = GainUtil.getWeekdays();
System.out.println(weekdays);
*/
/* List<String> sixMonth = GainUtil.getSixMonth(DateUtil.formatDateTime(LocalDateTime.now()));
System.out.println(sixMonth);
String weekOfDate = GainUtil.getWeekOfDate("2021-03-22");
System.out.println(weekOfDate);*/
/* Map<String, String> weekDays = GainUtil.getMonthDays(new Date(), -1);
System.out.println(weekDays);*/
/*
System.out.println(weekDays);
System.out.println(beginDate);
System.out.println(endDate);
*/
String s="2021-02";
/* String yearOfString = s.substring(0, 4);
Integer year = Integer.valueOf(yearOfString);
System.out.println(year);
String monthOfString = s.substring(5, 7);
Integer month = Integer.valueOf(monthOfString);
System.out.println(month);
String firstDayOfMonth = GainUtil.getFirstDayOfMonth(year, month);
System.out.println(firstDayOfMonth);
*/
//获取当月第一天和最后一天
//Map<String, String> firstDayAndEndDayOfMonth = GainUtil.getFirstDayAndEndDayOfMonth(s);
//System.out.println(firstDayAndEndDayOfMonth);
//获取月份最后一天
String firstDayOfMonth = GainUtil.getFirstDayOfMonth(s);
String lastDayOfMonth = GainUtil.getLastDayOfMonth(s);
System.out.println(firstDayOfMonth);
System.out.println(lastDayOfMonth);
}
/**
* //获取上一个自然周
* Map<String, String> weekDays = GainUtil.getWeekDays(new Date(), -1);
* String beginDate = weekDays.get("beginDate");
* String endDate = weekDays.get("endDate");
* List<String> days = GainUtil.getDays(beginDate, endDate);
* System.out.println(days);
* for (int i = 0; i < days.size(); i++) {
* //转换星期几
* String coverDate = days.get(i);
*
* String weekOfDate = GainUtil.getWeekOfDate(coverDate);
* System.out.println(weekOfDate);
* }
*
* System.out.println("====================================");
* //获取上一个自然月
* Map<String, String> monthDays = GainUtil.getMonthDays(new Date(), -1);
* String beginDateOfMonth = monthDays.get("beginDate");
* String endDateOfMonth = monthDays.get("endDate");
* List<String> daysOfMonth = GainUtil.getDays(beginDateOfMonth, endDateOfMonth);
* System.out.println(daysOfMonth);
*
* System.out.println("====================================");
* //获取前6个月
* List<String> sixMonth = GainUtil.getSixMonth(DateUtil.formatDateTime(LocalDateTime.now()));
* System.out.println(sixMonth);
* for (int i = 0; i < sixMonth.size(); i++) {
* System.out.println(sixMonth.get(i));
*
* }
*/
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118753.html