任何一个程序,日期处理时难免的。Java 中日期处理主要使用三个类:        

java.util.Date //日期
 java.text.DateFormat //日期格式化
 java.util.Calendar //日历
 java.sql.Date



一般项目中日期处理的需求也有三个:


把一个日期格式化为一个字符串;


把一个字符串格式化为日期;


对日期修改的操作,如计算某一天之后的 100 天是几月几号。


一.Date


         Date 表示日期 ,它在 java.util 包下。创建一个 Date 对象,默认的为当前系统时间。如下例:

import java.util.Date;
public class TestDate {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println("当前日期为:" + now);
    }
}




运行结果为:

当前日期为:Sat Oct 23 17:04:52 CST 2021

DateFormat对之进行格式的修改。

二.DateForment



         DateFormat 表示日期的格式 ,它其实是个抽象类,我们一般声明它,创建的是它的子类 SimpleDateFormat。



        在创建 SimpleDateFormat 时,我们可以利用构造方法传参设置日期格式。构造方法传入的格式,yyyy 年;MM 月;dd 天;HH 小时;mm 分;ss 秒;SSS 毫秒。



import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDate {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println("原始日期格式为:" + now);
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        String dateStr1 = df.format(now);
        System.out.println(dateStr1);
//因为applyPattern方法属于SimpleDateFormat,所以这里需要强转
        SimpleDateFormat sdf = (SimpleDateFormat) df;
        sdf.applyPattern("yyyy年MM月dd日");
        String dateStr2 = sdf.format(now);
        System.out.println(dateStr2);
        sdf.applyPattern("今天是yyyy年MM月dd日");
        String dateStr3 = sdf.format(now);
        System.out.println(dateStr3);
    }
}



原始日期格式为:Sat Oct 23 17:17:09 CST 2021
2021-10-23 17:17:09.784
2021年10月23日
今天是2021年10月23日

我们利用DateFormat 的 parse 方法完成转换。

代码如下:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDateConvert {
    public static void main(String[] args) {
        String dateStr = "2000-07-27";
        Date date;
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            date = df.parse(dateStr);
            System.out.println("转换为日期格式 = " + date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}



DateFormat 的 parse 方法会报一个编译时异常 ParseException,当输入的日期格式与要求的格式不一致时,此异常发生,如上例我们要求的格式年月日中间用-分开,但 dateStr 如果为 2000/07/27 则会报异常。为解决此问题,我们可以引入pattern



import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateConvert {

    /**
     * 把指定格式的字符串转换为日期
     * @param str
     * @param pattern
     * @return
     */
    public  static Date convertToDate(String str,String pattern){
        DateFormat df = new SimpleDateFormat(pattern);
        Date date = null;
        try {
            date = df.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;

    }

    /**
     * 把yyyy-MM-dd格式的字符串转换为日期
     * @param str
     * @return
     */
    public  static Date convertToDate(String str){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = df.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 把日期转为指定格式的字符串
     * @param date 日期
     * @param pattern 字符串
     * @return
     */
    public  static String convertToStr(Date date,String pattern){
        DateFormat df = new SimpleDateFormat(pattern);
        return df.format(date);

    }

    /**
     * 把日期转换为yyyy-MM-dd格式的字符串
     * @param date
     * @return
     */
    public  static String convertToStr(Date date){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        return df.format(date);
    }
}