任何一个程序,日期处理时难免的。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);
}
}