日期类也是我们开发时经常碰到的一个类型。特别是涉及到日期类型和字符串类型之间的一些转换时,经常会不知所措。
特别是要根据需求,转换成不同的表达形式,或者是截取、比较。下面是根据老九学堂的视频资料,整理的一些例子。
package knowledge;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class CalendarDemo {
public static void main(String[] args) {
// =========================例1=========================
// 例1 表示当前系统时间
// Calendar是一个抽象类,不能直接用new创建一个对象。需要用子类里的getInstance方法创建
// Calendar cal = new Calendar();
Calendar cal = Calendar.getInstance();
// 获取当前时间的年 月 日 小时、、、
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int millSec = cal.get(Calendar.MILLISECOND);
System.out.println("格式转换前的当前时间:" + year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second
+ ":" + millSec);
// 用format方法对当前时间进行转换,使得个位数月份日期能以两位数的形式表示,例如 6月 变成06月
// %02d表示以两位数表示,不满足时以0代替
String strTime = String.format("%d-%02d-%02d %02d:%d:%02d:%d", year, month, day, hour, minute, second, millSec);
System.out.println("格式转换后的当前时间:" + strTime);
System.out.println("=================例2=================");
// 例2 利用Date表示当前系统时间,但缺点是如果月份为个位数时,不会补齐0
cal.set(2020, 8, 15, 21, 59, 59);
// 返回到毫米的时间形式
Date date = cal.getTime();
System.out.println("例2的时间-英式:" + date);
System.out.println("例2的时间-英式:" + date.toString());
// 删除线表示是过时的方法
System.out.println("例2的时间-格林尼治:" + date.toGMTString());
System.out.println("例2的时间-随系统设置的地区的表示方式:" + date.toLocaleString());
System.out.println("=================例3=================");
// 例3 利用SimpleDateFormat表示当前系统时间,有点是可以通过自己设置的格式,补齐0
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String strDate = ft.format(date);
System.out.println("例3的时间:" + strDate);
System.out.println("=================例4=================");
// 例4 将字符串转换为Date型
Date dt = null;
try {
dt = ft.parse("2020-05-01 12:45:54:666");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println("例4的当前时间:" + dt.toLocaleString());
System.out.println("=================例5=================");
// 例5 比较两个日期的相差天数
Calendar cal1 = new GregorianCalendar(2020, 8, 23);
Calendar cal2 = cal;
// Math.abs两数之差的绝对值
long diff = Math.abs(cal1.getTimeInMillis() - cal2.getTimeInMillis());
int diffDays = (int) (diff / 1000 / 60 / 60 / 24);
System.out.println(
"cal1:" + cal1.get(Calendar.YEAR) + "-" + cal1.get(Calendar.MONTH) + "-" + cal1.get(Calendar.DATE));
System.out.println(
"cal2:" + cal2.get(Calendar.YEAR) + "-" + cal2.get(Calendar.MONTH) + "-" + cal2.get(Calendar.DATE));
System.out.println("例5的时间差:" + diffDays);
// 日期的加减
cal1.add(Calendar.MONTH, 3);
cal1.add(Calendar.YEAR, -3);
System.out.println(
"cal1加减后的日期:" + cal1.get(Calendar.YEAR) + "-" + cal1.get(Calendar.MONTH) + "-" + cal1.get(Calendar.DATE));
}
}
执行结果如下
格式转换前的当前时间:2020-5-20 9:12:23:90
格式转换后的当前时间:2020-05-20 09:12:23:90
=================例2=================
例2的时间-英式:Tue Sep 15 21:59:59 JST 2020
例2的时间-英式:Tue Sep 15 21:59:59 JST 2020
例2的时间-格林尼治:15 Sep 2020 12:59:59 GMT
例2的时间-随系统设置的地区的表示方式:2020-9-15 21:59:59
=================例3=================
例3的时间:2020-09-15 21:59:59:090
=================例4=================
例4的当前时间:2020-5-1 12:45:54
=================例5=================
cal1:2020-8-23
cal2:2020-8-15
例5的时间差:7
cal1加减后的日期:2017-11-23