一、时间的格式化:
创建一个公共类Calendar专门处理时间相关的事务,定义两个公用方法,即可在主函数中调用
1、String转Date:
CommonUtil文件中定义一个静态方法 formatDate,主函数中可直接用类名.方法名的方式调用;
参数中的strDate是指要转换的时间字符串;
pattern是要转换的字符串的时间格式,如“yyyy-MM-dd”,“yyyy年MM月dd日”等,时间字符串的格式需要与pattern匹配才能正常完成转换。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 字符串类型的时间转换为指定格式的Date型时间
* 若字符串格式错误,则输出当前时间,并且输出报错信息
* formatDate
* @return Date
*/
public static Date formatDate(String pattern, String strDate) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = null;
try {
date = sdf.parse(strDate);
} catch (ParseException e) {
date = new Date();
e.printStackTrace();
}
return date;
}
在主函数中,用类名.方法名调用这个转换方法。尝试正确和错误两种情况:
例如,故意输入一个格式不符的时间“2020年5-12”,会报错:java.text.ParseException: Unparseable date: "2020年05-12"
若定义date=“2020-5-12”,则会输出对应的Date型时间:Sun Jul 12 11:22:57 CST 2020
public static void main(String[] args){
Date newDate = CommonUtil.formatDate("yyyy-MM-dd", "2020年05-12");
System.out.println(newDate);
}
2、Date转String:
CommonUtil文件中定义一个静态方法 format,主函数中可直接用类名.方法名的方式调用;
参数中的date是指要转换的Date型时间;
pattern是要转换的字符串的时间格式,如“yyyy-MM-dd”,“yyyy年MM月dd日”等。
/**
* Date型时间转换为指定格式的字符串
* formatDate
* @return Date
*/
public static String format(String pattern, Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String strDate = sdf.format(date);
return strDate;
}
在主函数中,用类名.方法名调用这个转换方法。
public static void main(String[] args){
Date date=new Date(); //取当前时间
String strDate = CommonUtil.format("yyyy年MM月dd日", date);
System.out.println(strDate);
}
二、Java中,对指定时间/当前时间做推移,推前/延后,N个年/月/日:应用Calendar类中的add方法
1、CommonUtil文件中,定义一个用做时间推移的方法changeDate,三个参数,具体含义见注释。
import java.util.Calendar;
import java.util.Date;
/**
* 以指定时间为基准,推前或延后若干年/月/日
* @param date Date型的时间
* @param type 取值范围:year-移动若干年,month-移动若干月,day-移动若干天
* @param n 时间推移的年数、月数、天数,整数。正值代表向后推移,负值代表向前推移
* @return
*/
public static Date changeDate(Date date, String type, int n) {
int changeType;
switch(type) {
case "year" : changeType = Calendar.YEAR; break;
case "month" : changeType = Calendar.MONTH; break;
case "day" : changeType = Calendar.DAY_OF_MONTH; break;
default : ; return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(changeType, n);
return calendar.getTime();
}
2、示例:在主方法中,对当前日期做向前推移两个月的操作,示例如下:
public static void main(String[] args){
Date date = new Date();
Date newDate = CommonUtil.changeDate(date, "month", -2);
System.out.println(CommonUtil.format("yyyy-MM-dd", newDate));
}
三、SQL中时间的推移:DATE_ADD方法
(date为原来的时间,推移后重新命名为newDate)
DATE_ADD(date, INTERVAL n YEAR)AS newDate
DATE_ADD(date, INTERVAL n MONTH)AS newDate
DATE_ADD(date, INTERVAL n DAY)AS newDate