JAVA工具类汇总整理–日期 , 时间
近期,和日期时间打交道较多.工具类写了一些 , 也百度一了些 . 毕竟这些工具类 不是我们开发日常太过于需要关注的东西 , 所以自己写还是比较费时间的 , 而且影响工作效率. 最后基本上有需求直接百度, 但是也hi 你的需求别人可没有 , 都是一些比较常见的 而且重复较多不说 , 通篇文章只字未改.让本来话有点小希望点进去的你, 立马退了出来.
就在昨天灵感突发 , 何不按照类型 , 整理一份. 方便你我他
同时也希望各位大佬有相关的资源或写的得不清楚的欢迎评论区交流,有可以优化的地方也欢迎大佬指教指教可以在评论区,或则私信给我 , 我会定期更新这一系列.后续也会有其他类型的文章更新出来
目录 :
1.获取当月第一天和最后一天
2.获取起止日期区间所有日期
3.时分秒转换毫秒值
4.以当前日期为第一天 获取后六天日期
5.获取当前时间的日期 (可以自己动手修改为获取当月或者当周的所有时间相对应的星期)
6.根据日期获取当月最大天数或最小天数
7.将毫秒值转换为时间日期
8.获取两个日期之间的天数
9.获取当前日期时间戳(可以自己动手div 修改)
10获取日期的星期数
1.获取当月第一天和最后一天
public static Map<String, Object> getDateForMonth(){
Map<String, Object> resultMap = new HashMap<>();
Calendar ca=Calendar.getInstance();
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
int maximum = ca.getActualMaximum(Calendar.DAY_OF_MONTH);
int minmum=ca.getActualMinimum(Calendar.DAY_OF_MONTH);
int day=ca.get(Calendar.DAY_OF_MONTH);
Calendar cal=(Calendar)ca.clone();
cal.add(Calendar.DATE, maximum-day);
Date dateD=cal.getTime();
String strD=f.format(dateD);
cal=(Calendar)ca.clone();
cal.add(Calendar.DATE, minmum-day);
Date dateX=cal.getTime();
String strX=f.format(dateX);
resultMap.put("start" , strX);
resultMap.put("end" , strD);
return resultMap;
}
2.获取起止日期区间所有日期
public static List<Object> forDate(String startTime , String endTime) {
List<Object> timeList = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d1 = sdf.parse(startTime);
Date d2 = sdf.parse(endTime);
Date tmp = d1;
Calendar dd = Calendar.getInstance();
dd.setTime(d1);
while (tmp.getTime() < d2.getTime()) {
tmp = dd.getTime();
timeList.add(sdf.format(tmp));
// 天数加上1
dd.add(Calendar.DAY_OF_MONTH, 1);
}
} catch (Exception e) {
e.printStackTrace();
}
return timeList;
}
3.时分秒转换毫秒值
public static int timeCycle(String date){
String[] split1 = date.split(":");
int reDate = Integer.valueOf(split1[0])*3600+Integer.valueOf(split1[1])*60+Integer.valueOf(split1[2]);
return reDate;
}
4.以当前日期为第一天 获取后六天日期
//例 2020-11-09
public static List<Object> getPastDate() {
List<Object> list = new ArrayList<>();
for (int i = 0; i < 7; i++) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + i);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d");
String result = format.format(today);
list.add(result);
}
return list;
}
输出结果 : [2020-11-9, 2020-11-10, 2020-11-11, 2020-11-12, 2020-11-13, 2020-11-14, 2020-11-15]
5.获取当前时间的日期 (可以自己动手修改为获取当月或者当周的所有时间相对应的星期)
public static void main(String[] args) throws ParseException {
String firstDay = dateToWeek("2020-11-09");
System.err.println(firstDay);
}
public static String dateToWeek(String datetime) throws java.text.ParseException {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Calendar cal = Calendar.getInstance(); // 获得一个日历
Date datet = null;
datet = (Date) f.parse(datetime);
cal.setTime(datet);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
if (w < 0)
w = 0;
return weekDays[w];
}
输出结果 : 星期一
6.根据日期获取当月最大天数或最小天数
public static void main(String[] args) throws ParseException {
String maxDay = getMaxMonthDate("2020-11-09");
System.err.println(maxDay);
String minDay = getMinMonthDate("2020-11-09");
System.err.println(minDay);
}
//最大
public static String getMaxMonthDate(String date) throws ParseException {
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat1.parse(date));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return dateFormat.format(calendar.getTime());
}
//最小
public static String getMinMonthDate(String date) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d");
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat.parse(date));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return dateFormat.format(calendar.getTime());
}
输出结果 : 2020-11-30 , 2020-11-1
7.将毫秒值转换为时间日期
public static String formatDateTime(long timeMillis) {
long day = timeMillis / (24 * 60 * 60 * 1000);
long hour = (timeMillis / (60 * 60 * 1000) - day * 24);
long min = ((timeMillis / (60 * 1000)) - day * 24 * 60 - hour * 60);
long s = (timeMillis / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
long sss = (timeMillis - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000 - s * 1000);
return (day > 0 ? day + "," : "") + hour + ":" + min + ":" + s + "." + sss;
}
8.获取两个日期之间的天数
public static void main(String[] args) throws ParseException {
double daysBetweenDate = getDaysBetweenDate("2020-11-01", "2020-11-09");
System.err.println(daysBetweenDate);
}
public static double getDaysBetweenDate(String before, String after) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
Date beforeDate = null;
Date afterDate = null;
try {
beforeDate = sdf.parse(before);
afterDate = sdf.parse(after);
} catch (ParseException e) {
e.printStackTrace();
}
long beforeTime = beforeDate.getTime();
long afterTime = afterDate.getTime();
Long MillisecBetweenDate = afterTime - beforeTime;
return MillisecBetweenDate / (1000 * 60 * 60 * 24);
}
输出结果 : 8.0
9.获取当前日期时间戳(可以自己动手div 修改)
public static Timestamp getTimestamp() {
return new Timestamp(new Date().getTime());
}
获取某个日期是星期几
String time = "2020-12-3";
//将String类型转换为Date日期类
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse((String) time);
//必须是从7到6 weekDays数组必须如此排序 ,
String[] weekDays = {"7", "1", "2", "3", "4", "5", "6"};
String[] weekDays = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0) {
w = 0;
}
System.out.println("date", weekDays[w]);
也是突发灵感 , 临时整理几个, 后续会定期更新 !!!