package com.Utils.xioahua;
/**
* Calendar计算
* @Author 搬砖小华
* @Date 2022/08/05
*/
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
public class DateUtil {
/**
* 获取今日开始时间和结束时间
*
* @param condition
* @return
*/
public static void setDayRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
condition.put("startTime", calendar.getTime());
calendar.set(Calendar.HOUR_OF_DAY, 24);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取昨天开始时间和结束时间
*
* @param condition
* @return
*/
public static void setYesterdayRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, -24);
condition.put("startTime", calendar.getTime());
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.HOUR_OF_DAY, 23);
condition.put("stopTime", calendar.getTime());
}
/**
* 获得最近三天的开始时间和结束时间
*
* @param condition
* @return
*/
public static void setThreeRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 24);
condition.put("stopTime", calendar.getTime());
calendar.set(Calendar.HOUR_OF_DAY, -72);
condition.put("startTime", calendar.getTime());
}
/**
* 获得近一周的开始时间和结束时间
*
* @param condition
* @return
*/
public static void setDaySevenRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.HOUR_OF_DAY, 24);
condition.put("stopTime", calendar.getTime());
calendar.set(Calendar.HOUR_OF_DAY, -168);
condition.put("startTime", calendar.getTime());
}
/**
* 获得近一月的开始时间和结束时间
*
* @param condition
* @return
*/
public static void setDayTRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.HOUR_OF_DAY, 24);
condition.put("stopTime", calendar.getTime());
calendar.set(Calendar.HOUR_OF_DAY, -720);
condition.put("startTime", calendar.getTime());
}
/**
* 获取本周开始时间和结束时间
*
* @param condition
* @return
*/
public static void setWeekRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.DAY_OF_WEEK, 7);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取上周开始时间和结束时间
*
* @param condition
* @return
*/
public static void setLastWeekRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendar.add(Calendar.DAY_OF_WEEK, -7);
condition.put("startTime", calendar.getTime());
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
calendar.add(Calendar.DAY_OF_WEEK, 6);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取本月开始时间和结束时间
*
* @param condition
* @return
*/
public static void setMonthRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.DAY_OF_WEEK, 7);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
// calendar.set(Calendar.HOUR_OF_DAY, 24);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取上月开始时间和结束时间
*
* @param condition
* @return
*/
public static void setLastMonthRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.DAY_OF_WEEK, 7);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
//calendar.set(Calendar.HOUR_OF_DAY, 24);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取本季度开始时间和结束时间
*
* @param condition
* @return
*/
public static void setQuarterRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
int currentMonth = calendar.get(Calendar.MONTH) + 1;
try {
if (currentMonth >= 1 && currentMonth <= 3)
calendar.set(Calendar.MONTH, 0);
else if (currentMonth >= 4 && currentMonth <= 6)
calendar.set(Calendar.MONTH, 3);
else if (currentMonth >= 7 && currentMonth <= 9)
calendar.set(Calendar.MONTH, 6);
else if (currentMonth >= 10 && currentMonth <= 12)
calendar.set(Calendar.MONTH, 9);
calendar.set(Calendar.DATE, 1);
} catch (Exception e) {
e.printStackTrace();
}
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.MONTH, 3);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取上季度开始时间和结束时间
*
* @param condition
* @return
*/
public static void setLastQuarterRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
int currentMonth = calendar.get(Calendar.MONTH) + 1;
try {
if (currentMonth >= 1 && currentMonth <= 3)
calendar.set(Calendar.MONTH, 0);
else if (currentMonth >= 4 && currentMonth <= 6)
calendar.set(Calendar.MONTH, 3);
else if (currentMonth >= 7 && currentMonth <= 9)
calendar.set(Calendar.MONTH, 6);
else if (currentMonth >= 10 && currentMonth <= 12)
calendar.set(Calendar.MONTH, 9);
calendar.set(Calendar.DATE, 1);
} catch (Exception e) {
e.printStackTrace();
}
calendar.add(Calendar.MONTH, -3);
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.MONTH, 3);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取近半年开始时间和结束时间
*
* @param condition
* @return
*/
public static void setHalfYearRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
calendar.add(Calendar.MONTH, -6);
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.MONTH, 6);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取上半年开始时间和结束时间
*
* @param condition
* @return
*/
public static void setUpHalfYearRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), 0, calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.MONTH, 6);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取下半年开始时间和结束时间
*
* @param condition
* @return
*/
public static void setNextHalfYearRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), 0, calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
calendar.add(Calendar.MONTH, 6);
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.MONTH, 6);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取本年开始时间和结束时间
*
* @param condition
* @return
*/
public static void setYearRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), 0, calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.YEAR, 1);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* 获取上一年开始时间和结束时间
*
* @param condition
* @return
*/
public static void setLastYearRange(Map<Object, Object> condition) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), 0, calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
calendar.add(Calendar.YEAR, -1);
condition.put("startTime", calendar.getTime());
calendar.add(Calendar.YEAR, 1);
calendar.set(Calendar.SECOND, -1);
condition.put("stopTime", calendar.getTime());
}
/**
* ("startTime" -> "Fri Jun 08 00:00:00 CST 2018")String的Date转为String类型的date
*/
public static String strToformatDate(String date) {
String str = "";
Date date1 = new Date();
try {
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
date1 = df.parse(date);
df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
str = df.format(date1);
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
public static Date timeToTalculate(Date date,String years,int amount){
Calendar c = Calendar.getInstance();
//设置时间
c.setTime(date);
if(years.equals("day")){
//时间加一天
c.add(Calendar.DAY_OF_MONTH, amount);
//get获取时间
return c.getTime();
}else if(years.equals("year")){
c.add(Calendar.YEAR, amount);
return c.getTime();
}
return null;
}
}
@Test
public void test4(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/*
* 获取15天后是多少号?
*
* add(int field,int n)
* 为当前calendar指定时间分量上累加给定值
* 若传入的是负数,则是累减
*/
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, 15); //给当前时间加15天
//System.out.println(calendar.getTime());
System.out.println(sdf.format(calendar.getTime()));
/*
* 三个月零十天后的那周的星期三是几号?
*/
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 3); //给当前时间加3个月
cal.add(Calendar.DAY_OF_YEAR, 10); //给当前时间加10天
//得出三个月十天后的日期,然后将日期设为当周星期三
cal.set(Calendar.DAY_OF_WEEK, 4); //1是周天,所以4是周三
//System.out.println(cal.getTime());
System.out.println(sdf.format(cal.getTime()));
/*
* 获取某个时间分量所允许的最大值
* 获取今年最大天数
*/
Calendar cal1 = Calendar.getInstance();
int days = cal1.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println("今年最大天数为:"+days+"天");
/*
* 一周的第一天是星期日
* 获取当前是星期几
*/
Calendar cal2 = Calendar.getInstance();
int w = cal2.get(Calendar.DAY_OF_WEEK);
System.out.println("今天是星期:"+(w==1?7:w-1));
}
放松一下:
1. 一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。”
2. 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world。
3. 问:程序员最讨厌康熙的哪个儿子。答:胤禩。因为他是八阿哥(bug)
4. 程序猿要了3个孩子,分别取名叫Ctrl、Alt 和Delete,如果他们不听话,程序猿就只要同时敲他们一下就会好的。
5. 今天在公司听到一句惨绝人寰骂人的话:“你TM就是一个没有对象的野指针!”
6. 程xx遭遇车祸成植物人,医生说她活下来的希望只有万分之一,唤醒更为渺茫。她的同事和亲人没放弃,并根据程xx对testing痴迷的作风,每天都在她身边念:“你测的模块上线后回滚了。”奇迹发生了,程xx醒来第一句话:确认那模块是我测的?
7. 一个程序员在海滨游泳时溺水身亡。他死前拼命的呼救,当时海滩上有许多救生员,但是没有人救他。因为他一直大喊“F1!”“F1!”,谁都不知道“F1”究竟是什么意思。
8. 世界上最远的距离,是我在if里你在else里,虽然经常一起出现,但却永不结伴执行。
9. 正在码代码ing,医院回来的同事一脸的苦逼样子,问他怎么了?他回答:得了类风湿性关节炎了,我怕会遗传给下一代啊。我一脸的问号:谁说类风湿性关节炎能遗传的?丫一脸诧异:类不是继承的吗?
10. 我很奇怪客栈这个词,难道后入住的必须先退房吗?
11. 话说,决定一个程序员跳槽与否的关键因素是他前同事的现工资。
12. 程序员最憋屈的事情就是:你辛辛苦苦熬夜写了一个风格优雅的源文件,被一个代码风格极差的同事改了且没署名,以至于别人都以为你是写的。
13. 前端工程师说,我去交友网站找女朋友去了。朋友问,找到了么?工程师说,找到了他们页面的一个bug。