Java # 对于日期Date类的相关操作

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值 转换成 字符串