1. Date和String类型的转换
1.1 String 转 Date
使用 parse 方法,参数为 字符串String,需要进行异常处理
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("20210126");
System.out.println(date);
1.2 Date 转 String
使用 format 方法,参数为 日期Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(new Date());
System.out.println(time);
2. 对日期进行加减运算
利用 java.text包下的 SimpleDateFormat 类
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class DateCalcUtil {
public static void main(String[] args) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str = "20210126";
Date date = sdf.parse(str);
Calendar time = Calendar.getInstance();
time.setTime(date);
//日期减1年
time.add(Calendar.YEAR, -1);
//日期加3个月
time.add(Calendar.MONTH, 3);
//日期加10天
time.add(Calendar.DAY_OF_YEAR, 10);
Date resTime = time.getTime();
String resStr = sdf.format(resTime);
System.out.println(reStr);
}
}
3. 比较两个字符串日期的大小
3.1 直接进行字符串的比较
要求两个日期格式一样
String beginTime = "2021-01-26 07:19:23";
String endTime = "2021-01-26 17:19:29";
if (beginTime.compareTo(endTime) < 0){ // 代表beginTime 小于 endTime
//TODO
}
3.2 将日期转换为长整型
过于繁琐,要求两个日期格式一样
String beginTime = "2021-01-26 07:19:23";
String endTime = "2021-01-26 17:19:29";
long begin = Long.valueOf(beginTime.replaceAll("-", "").replaceAll(":", "").replace(" ", ""));
long end = Long.valueOf(endTime.replaceAll("-", "").replaceAll(":", "").replace(" ", ""));
if (begin < end){
//TODO
}
3.3 使用SimpleDateFormat转换
String beginTime = "2021-01-26 07:19:23";
String endTime = "2021-01-26 17:19:29";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date bt = sdf.parse(beginTime); // 需处理异常
Date et = sdf.parse(endTime);
if (bt.before(et)){
// TODO
}
注:如果是Date类型的日期,直接使用 before 和 after 比较即可
4. 日期转换可能会出现的异常 Cannot format given Object as a Date
错误信息:
Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at .....QxtMessageUtils.main(QxtMessageUtils.java:210)
原因:parse 或者 format 参数传递错误
- parse 的作用是将 字符串 转换成 Date值
- format 的作用是将 Date值 转换成 字符串