Java常用方法——时间的格式化String和Date的相互转换,及推前延后N个年月日

一、时间的格式化:

创建一个公共类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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值