前言
使用日期函数,获取当月多少天,当前第几月,以及各种与时间有关系的操作;
这篇文章草稿是在19-5-30写好的,一直想完善,写个一网打尽的,奈何自己懒,一直没写完,时隔一年,写完吧,基本上可以处理时间的基本转换操作
公共抽象类CalendarAPI
参考文章一
参考文章二
字符串互转时间
Date d=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//时间转字符串 2020-07-17 11:30:49
String ds=df.format(d);
System.out.println(ds);
try {
//字符串转时间 Fri Jul 17 11:26:22 CST 2020
Date sd=df.parse("2020-07-17 11:26:22");
System.out.println(sd);
} catch (ParseException e) {
e.printStackTrace();
}
毫秒值转时间
Calendar calendar2 = Calendar.getInstance();
calendar2.setTimeInMillis(1571952368000L);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String format = df.format(calendar2.getTime());
System.out.println(format);
//2019-10-25
工具类
获取当月多少天 本(周/月)上(周/月)下(周/月)周一周日 本月第一天,最后一天
package com.picc.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @Author ZhangLe
* @Date 2020/9/27 15:21
*/
public class DateUtil {
private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
private static final Calendar calendar =Calendar.getInstance();
/**
* 返回当前时间
* @return
*/
public static String getTime() {
Date date = new Date();
String format = df.format(date);
return format;
}
/**
* 获取两个时间差值 几天几时几分几秒
* @param startTime
* @param endTime
* @return
*/
public static String dateDifference(String startTime ,String endTime){
String str="";
try {
Date start = df.parse(startTime);
Date end = df.parse(endTime);
//除以1000是为了转换成秒
long between=(end.getTime()-start.getTime())/1000;
long day=between/(24*3600);
long hour=between%(24*3600)/3600;
long minute=between%3600/60;
long second=between%60;
System.out.println(between%60);
str=day+"天"+hour+"小时"+minute+"分"+second+"秒";
} catch (ParseException e) {
e.printStackTrace();
}
return str;
}
/**
* 返回当前时间之前N周 本周 之后N周 的周一周日准确时间
* @param date 当前时间
* @param week 获取上几周就传负数几 下几周就正数+1 举例上周 传 -1 本周传 0 下周传 1
* @return
*/
public static Map<String,String> reMonSun(String date,int week){
Map<String,String> map = new HashMap();
try {
calendar.setTime(df2.parse(date));
//设置一周第一天是星期一 国外的一周第一天是星期天 默认是按照国外算得
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.add(Calendar.WEEK_OF_MONTH, week);
//查询当前星期几 在本周中 从周日开始算 星期天就是 1 星期一就是2 以此类推
int nowTime =calendar.get(Calendar.DAY_OF_WEEK);
//是1的时候就是星期天 给他赋值8 可以在下边得出负数 用于消减时间 其他状况不做处理
if(nowTime==1){
nowTime= 8;
}
calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - nowTime);
Date monday = calendar.getTime();
String weekBegin = df.format(monday);
// 此时日期已经是星期一 给当前日期加上6天必然是周末
calendar.add(Calendar.DATE, 6);
Date sundayDate = calendar.getTime();
String weekEnd = df.format(sundayDate);
map.put("mondayDate", weekBegin);
map.put("sundayDate", weekEnd);
return map;
}catch (Exception e){
throw new RuntimeException(e);
}
}
/**
* 返回当前时间之前N月 本月 之后N月第一天和最后一天
* @param date 当前时间
* @param month 获取上几月就传负数几 下几月就正数+1 举例上月 传 -1 本月传 0 下月传 1
* @return
*/
public static Map<String,String> reOneLast(String date,int month){
Map<String,String> map = new HashMap();
try {
calendar.setTime(df2.parse(date));
//当前月的上个月
calendar.add(Calendar.MONTH, month);
//设置当前月的最大天数
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
Date lastDateOfMonth = calendar.getTime();
String lastDay = df.format(lastDateOfMonth);
//设置一 即为每月第一天
calendar.set(Calendar.DATE,1);
Date oneDayofMonth = calendar.getTime();
String oneDay = df.format(oneDayofMonth);
map.put("oneDay", oneDay);
map.put("lastDay", lastDay);
}catch (Exception e){
throw new RuntimeException(e);
}
return map;
}
/**
* 返回当月最大天数
* @param date 当前时间
* @return
*/
public static int reMonthMaxDay(String date){
try {
calendar.setTime(df2.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
int actualMaximum = calendar.getActualMaximum(Calendar.DATE);
return actualMaximum;
}
public static void main(String[] args) {
String date="2020-11-05";
}
}
获取当月多少天
输入日期获取当月多少天
String date="2019-05";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
Calendar calendar =Calendar.getInstance();
try {
calendar.setTime(dateFormat.parse(date));
}catch (Exception e){
throw new RuntimeException(e);
}
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
calendar.set(Calendar.DATE, 1);
calendar.roll(Calendar.DATE,-1);
int time1 =calendar.get(Calendar.DATE);
System.out.println(time1);
工具类做法
/**
* 返回当月最大天数
* @param date 当前时间
* @return
*/
public static int reMonthMaxDay(String date){
try {
calendar.setTime(df2.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
int actualMaximum = calendar.getActualMaximum(Calendar.DATE);
return actualMaximum;
}
两个日期比较大小
String old="2020-07-12 19:30:48.0";
String now="2020-07-17 11:30:48.0";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date sd1=df.parse(old);
Date sd2=df.parse(now);
//sd1时间在sd2时间之前
System.out.println(sd1.before(sd2));
//sd1时间在sd2时间之后 返回布尔值
System.out.println(sd1.after(sd2));
} catch (ParseException e) {
e.printStackTrace();
}
获取某天的N天/月/年前
Calendar的方法很多,星期,小时,。。根据需求调用方法即可
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();//获取当前时间
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, -15);//当前时间减去15天,即15天前的时间
String format = dateFormat.format(calendar.getTime());
System.out.println(format);
System.out.println(calendar.getTime());
calendar.add(Calendar.YEAR, -1);//当前时间减去一年,即一年前的时间
String format2 = dateFormat.format(calendar.getTime());
System.out.println(format2);
System.out.println(calendar.getTime());
calendar.add(Calendar.MONTH, -1);//当前时间前去一个月,即一个月前的时间
String format3 = dateFormat.format(calendar.getTime());
System.out.println(format3);
System.out.println(calendar.getTime());
calendar.add(Calendar.MONTH, 1);//当前时间加一个月,即一个月后的时间
String format4 = dateFormat.format(calendar.getTime());
System.out.println(format4);
System.out.println(calendar.getTime());