时间格式
yyyy-MM-dd HH:mm:ss SSS
含义:年-月-日 时:分:秒 毫秒
说明:以下内容是我用的比较多的,其实每次写代码基本还是会在网上搜怎么写,有点儿浪费时间,所以记录一下。
1.改变日期(yyyy-MM-dd)增减天数
/**
* 此方法是为了改变日期
* @param date 原始日期
* @param num 改变天数,正数则是加几天,负数则是减几天
* @return
*/
public static String changeDateStr(String date,int num){
SimpleDateFormat myFmt=new SimpleDateFormat("yyyy-MM-dd");
String dateStr = "";
Date dt = null;
try {
dt = myFmt.parse(date);
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(dt);
rightNow.add(Calendar.DAY_OF_YEAR, num);// 日期增减num天
dateStr = myFmt.format(rightNow.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return dateStr;
}
2.不熟悉的格式转换
第一种:
public static void amANDpm(){
try {
String timeStr = "1/12/2019 12:17 AM";
SimpleDateFormat df = new SimpleDateFormat ("MM/dd/yyyy HH:mm a", Locale.UK);
Date time = df.parse(timeStr);
SimpleDateFormat df2 = new SimpleDateFormat ("yyyy-MM-dd HH:mm");
System.out.println(df2.format(time));
} catch (ParseException e) {
e.printStackTrace();
}
}
这块代码是将不熟悉的格式转换成熟悉的格式,代码结果:
还有一些不熟悉的格式:
第二种:
public static void amANDpm2() {
try {
//转换成特定的格式
SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy K:m:s a", Locale.ENGLISH);
Date d2 = sdf.parse("Sep 29, 2012 1:00:01 AM");
Date d3 = new Date();
System.out.println("d2<系统默认> ====== " + d2);
System.out.println("d3<系统默认> ====== " + d3);
System.out.println("d3<特定格式> ====== " + sdf.format(d3));
} catch (Exception e) {
e.printStackTrace();
}
}
这段代码的运行结果:
3.带有时区
1.将日期换成有时区的格式:
public static String parseDateWithZ(String dateStr){
String result = "";
//此格式只有 jdk 1.7以上才支持 yyyy-MM-dd'T'HH:mm:ss.SSSXXX
try {
DateFormat df3 = new SimpleDateFormat("yyyy-MM-dd");
Date date = df3.parse(dateStr);
//特定格式
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); //yyyy-MM-dd'T'HH:mm:ss.SSSZ
result= df.format(date);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
此代码结果:(参数:2019-11-10)
2.第二种特殊格式
public static String parseDateWithZ2(String dateStr){
String result = "";
//此格式只有 jdk 1.7才支持 yyyy-MM-dd'T'HH:mm:ss.SSSXXX
try {
DateFormat df3 = new SimpleDateFormat("yyyy-MM-dd");
Date date = df3.parse(dateStr);
//特殊格式
SimpleDateFormat df1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
System.out.println("特殊格式:"+df1.format(date));
//常用格式
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("常用格式:"+df2.format(date));
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
代码结果:(参数:2019-11-10)
4.判断一个日期是否在一个特定范围
/**
* 判断是否在两个日期之间
* @param judgeDate 待判断的日期
* @param startDate 起始日期
* @param endDate 结束日期
* @return true-在两个日期范围内
*/
public static boolean isMidINdate(String judgeDate,String startDate,String endDate){
if(StringUtils.isEmpty(judgeDate)||StringUtils.isEmpty(startDate)||StringUtils.isEmpty(endDate)){
return false;
}
long judge = 0L;
if(judgeDate.contains("-")){//是yyyy-MM-dd格式的
judge = DateUtil.parse(judgeDate, "yyyy-MM-dd").getTime();//转换格式
}else{//直接是long的字符串
judge = Long.parseLong(judgeDate);
}
long start = DateUtil.parse(startDate, "yyyy-MM-dd").getTime();//转换格式
long end = DateUtil.parse(endDate, "yyyy-MM-dd").getTime();//转换格式
if(judge>=start && judge <=end){
return true;
}
return false;
}
举例解释:
1.参数:judgeDate =2019-12-21,startDate=2019-10-17,endDate=2019-12-20,结果:false.
2.参数:judgeDate =2019-12-18,startDate=2019-10-17,endDate=2019-12-20,结果:true.
5.判断是否在7天之后
/**
* 判断两个日期是否在7天以后,如果只有一个参数则只判断第一个,有第二个参数再判断第二个日期
* @param date1
* @param date2
* @return 只要与一个日期在7天之后则返回true
*/
public static boolean isDateOut7Day(String date1,String date2){
long date1Time = DateUtil.parse(date1, "yyyy-MM-dd").getTime();//转换格式
long judgeTime = System.currentTimeMillis()+ 7 * 24 * 60 * 60 * 1000;
if(date1Time>judgeTime){
return true;
}
if(StringUtils.isNotEmpty(date2)){
long date2Time = DateUtil.parse(date2, "yyyy-MM-dd").getTime();//转换格式
if(date2Time>judgeTime){
return true;
}
}
return false;
}
举例解释:(当天是2022年8月1日)
1.参数:date1=2022-08-03,date2=2022-08-06
结果:false
2.参数:date1=2022-08-03,date2=2022-08-10
结果:true
3.参数:date1=2022-08-08,date2=2022-08-10
结果:true
4.参数:date1=2022-07-11,date2=2022-07-30
结果:false