import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
public class DateUtils {
public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public static String dateToString(String format, Date date) {
sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
public static Date StringToDate(String format, String date) {
sdf = new SimpleDateFormat(format);
try {
return sdf.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 获取今天
*
* @return String
*/
public static String getToday() {
return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
}
/**
* 获取昨天
*
* @return String
*/
public static String getYestoday() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date time = cal.getTime();
return new SimpleDateFormat("yyyy-MM-dd").format(time);
}
public static String getYear() {
return Calendar.getInstance().get(Calendar.YEAR) + "";
}
/**
* 获取本月开始日期
*
* @return String
**/
public static String getMonthStart() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 1);
Date time = cal.getTime();
return new SimpleDateFormat("yyyy-MM-dd").format(time);
}
/**
* 获取本月最后一天
*
* @return String
**/
public static String getMonthEnd() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
Date time = cal.getTime();
return new SimpleDateFormat("yyyy-MM-dd").format(time);
}
/**
* 获取本周的第一天
*
* @return String
**/
public static String getWeekStart() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.WEEK_OF_MONTH, 0);
cal.set(Calendar.DAY_OF_WEEK, 1);
Date time = cal.getTime();
String format = new SimpleDateFormat("yyyy-MM-dd").format(time);
int year = (new Date().getYear() + 1900);
if (format.indexOf(year + "") == -1) {
format = getYearStart();
}
return format;
}
/**
* 获取本周的最后一天
*
* @return String
**/
public static String getWeekEnd() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, cal.getActualMaximum(Calendar.DAY_OF_WEEK));
cal.add(Calendar.DAY_OF_WEEK, 0);
Date time = cal.getTime();
String format = new SimpleDateFormat("yyyy-MM-dd").format(time);
int year = (new Date().getYear() + 1900);
if (format.indexOf(year + "") == -1) {
format = getYearEnd();
}
return format;
}
/**
* 获取本年的第一天
*
* @return String
**/
public static String getYearStart() {
return new SimpleDateFormat("yyyy").format(new Date()) + "-01-01";
}
/**
* 获取本年的最后一天
*
* @return String
**/
public static String getYearEnd() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, calendar.getActualMaximum(Calendar.MONTH));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date currYearLast = calendar.getTime();
return new SimpleDateFormat("yyyy-MM-dd").format(currYearLast);
}
/**
* .Description://根据字符日期返回星期几
*
*
*/
public static String getWeek(String dateTime) {
String week = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(dateTime);
SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");
week = dateFm.format(date);
week = week.replaceAll("星期", "周");
} catch (ParseException e) {
e.printStackTrace();
}
return week;
}
/**
* 获取本周是本年第几周
*
* @param args
* @throws Exception
*/
public static String getWeekNum() throws Exception {
List<String> aa = findWeekByStartAndEnd(getYearStart(), getYearEnd());
for (String date : aa) {
String weekNum = date.split("周")[0];
String startDateStr = date.split("周")[1].split("结束")[0];
String endDateStr = date.split("周")[1].split("结束")[1];
Date startDate = sdf.parse(startDateStr);
Date endDate = sdf.parse(endDateStr);
Date now = sdf.parse(sdf.format(new Date()));
if ((now.before(endDate) && now.after(startDate)) || now.equals(startDate) || now.equals(endDate)) {
return weekNum.split("第")[1];
}
}
return null;
}
// 查询指定时间的周的开始时间和结束时间
public static List<String> findWeekByStartAndEnd(String startDate, String endDate) throws Exception {
List<String> startEnd = new ArrayList<>();// 存放周的开始时间和结束时间
List<String> allTime = allTime(startDate, endDate);
List<List<String>> list2 = new ArrayList<>();// 存放一年每周
ArrayList<String> xinqis = new ArrayList<>();// 存放一周
int j = 0;
for (int i = 0; i < allTime.size(); i++) {
String date = allTime.get(i);// 2021-11
String week = getWeek(date);// 星期
if (week.equals("周六") || i == allTime.size() - 1) {
j++;
xinqis.add(date);
list2.add(xinqis);
xinqis = new ArrayList<>();
} else {
xinqis.add(date);
}
}
int i = 0;
for (List<String> list : list2) {
i++;
String string = list.get(0);
String string2 = list.get(list.size() - 1);
startEnd.add("第" + i + "周" + string + "结束" + string2);
}
return startEnd;
}
// 指定年的月开始时间和结束时间
public static List<String> getMonthStartEnd(int year) {
List<String> list = new ArrayList<>();
for (int i = 1; i < 13; i++) {
Date beginTime = getBeginTime(year, i);
Date endTime = getEndTime(year, i);
list.add("第" + i + "月" + ":" + sdf.format(beginTime) + ":" + sdf.format(endTime));
}
return list;
}
public static Date getBeginTime(int year, int month) {
YearMonth yearMonth = YearMonth.of(year, month);
LocalDate localDate = yearMonth.atDay(1);
LocalDateTime startOfDay = localDate.atStartOfDay();
ZonedDateTime zonedDateTime = startOfDay.atZone(ZoneId.of("Asia/Shanghai"));
return Date.from(zonedDateTime.toInstant());
}
public static Date getEndTime(int year, int month) {
YearMonth yearMonth = YearMonth.of(year, month);
LocalDate endOfMonth = yearMonth.atEndOfMonth();
LocalDateTime localDateTime = endOfMonth.atTime(23, 59, 59, 999);
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
return Date.from(zonedDateTime.toInstant());
}
// 查询指定时间的所有日期
public static List<String> allTime(String startDate, String endDate) throws Exception {
Long oneDay = 1000 * 60 * 60 * 24l;
List<String> list = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Long startDate1 = sdf.parse(startDate).getTime();
Long endDate1 = sdf.parse(endDate).getTime();
for (; startDate1 <= (endDate1); startDate1 += oneDay) {
list.add(sdf.format(new Date(startDate1)));
}
return list;
}
/**
* 同比
*
* @param args
* @throws Exception
*/
public static List<String> tonbi() throws Exception {
List<String> list = new ArrayList<String>();
String weekEnd = DateUtils.getWeekEnd();
Date weekEndDate = DateUtils.sdf.parse(weekEnd);
Calendar cal = Calendar.getInstance();
cal.set(weekEndDate.getYear() + 1900, weekEndDate.getMonth(), weekEndDate.getDate());
String startDate = DateUtils.sdf.format(cal.getTime());
list.add("今年" + cal.get(Calendar.YEAR) + "-01-01:" + startDate);
cal.add(Calendar.YEAR, -1);
Date time = cal.getTime();
String format = DateUtils.sdf.format(time);
list.add("去年" + (time.getYear() + 1900) + "-01-01" + ":" + format);
return list;
}
/**
* 环比
*
* @param args
* @throws Exception
*/
public static List<String> huanbi() throws Exception {
List<String> list = new ArrayList<String>();
String weekStart = DateUtils.getWeekStart();
String weekEnd = DateUtils.getWeekEnd();
Date weekEndDate = DateUtils.StringToDate("yyyy-MM-dd",weekEnd);
Date weekStartDate = DateUtils.StringToDate("yyyy-MM-dd",weekStart);
Calendar instance = Calendar.getInstance();
instance.setTime(weekStartDate);
int day1 = instance.get(Calendar.DAY_OF_YEAR);
instance.setTime(weekEndDate);
int day2 = instance.get(Calendar.DAY_OF_YEAR);
int dayNum = day2 - day1;
instance.add(Calendar.DATE, -dayNum);
String format = DateUtils.sdf.format(instance.getTime());
list.add("这周" + format + ":" + weekEnd);
instance.add(Calendar.DATE, -dayNum - 1);
format = DateUtils.sdf.format(instance.getTime());
instance.add(Calendar.DATE, dayNum);
String format2 = DateUtils.sdf.format(instance.getTime());
list.add("上周" + format + ":" + format2);
return list;
}
// 获取星期加日期
public static void getWorkDay(String startDate, String endDate) throws Exception {
List<String> allTime = allTime(startDate, endDate);
for (String string : allTime) {
String week = getWeek(string);
System.out.println(string + week);
}
}
}
java处理年月日周时间
最新推荐文章于 2024-02-20 10:54:18 发布