时间类库
Date和Calendar对象的创建
Date对象的创建:Date可以通过new关键字创建新对象,经常通过无参或传入一个long类型参数的方式来创建。
// 新建一个Date对象,不传参数时默认赋值为系统时间
Date date = new Date();
// 将long类型的值作为参数传入Date的构造方法,
//创建出一个用long值转换而来的新对象
date = new Date(longTime);
Calendar对象的创建:由于Calendar类是一个抽象类,所以无法直接通过new关键字来创建,只能通过调用其本身的getInstance()方法创建对象,来返回一个Calendar类型的对象。getInstanc()方法也可以将时区和区域中其中一个或者两个都作为参数传入,以此来设置Calendar对象的时区和区域,没有传入参数的变量将采用默认的值。
// Calendar是抽象类,无法通过new关键字直接创建,
// 可以调用其本身的getInstance()方法创建对象,
//返回一个Calender类型的对象
Calendar calendar = Calendar.getInstance();
Date、Calender、long和String相互转化
1、Date对象和long的互转:
标准基准时间(称为“纪元”):即1970年1月1日00:00:00 GMT。
long值:表示自标准基准时间(称为“纪元”)以来的指定毫秒数。
(1)Date转long值:
// 新建一个Date对象,不传参数时默认赋值为系统时间
Date date = new Date();
System.out.println("Date:" + date);
// Date -> long
// date.getTime()返回一个long类型的值
long longTime = date.getTime();
System.out.println("long: "+ longTime);
运行结果:
(2)long值转Date
//获得一个long类型的时间
long longTime = date.getTime();
System.out.println("long: "+ longTime);
// long -> Date
// 将long类型的值作为参数传入Date的构造方法,创建出一个新对象
date = new Date(longTime);
System.out.println("Date:" + date);
运行结果:
2、Date和String的互转
Date和String之间的相互转化,依靠SimpleFormat对象来充当它们之间的“翻译官”,可以将SimpleFormat对象想象成一个翻译软件,String和Date是两个语种,通过SimpleFormat对象调用format()可以将Date转换为String,调用parse()方法可以将String转换为Date。
(1)创建SimpleFormat对象,其中:
用y表示年份,一般用"yyyy"或"yy"来表示
用M表示月份,一般用"MM"来表示
用d表示日份,一般用"dd"来表示
用H表示小时,一般用"HH"来表示
用m表示分钟,一般用"mm"来表示
用s表示秒数,一般用"ss"来表示
用S表示毫秒数,毫秒数不常用,一般用"S"、“SS”、"SS"来表示
(2)Date转为String:通过调用format()方法,系统会将你指定的时间格式中的y、M、d、H、m、s、S替换成Date对象的年份、月份、日份、小时、分钟、秒数、毫秒数的值,并拼接成字符串。
// 时间格式:yyyy-MM-dd HH:mm:ss:SS
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
//时间格式:yyyy年MM月dd日 HH时mm分ss秒
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
//时间格式:yyyy-MM-dd
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
//时间格式:HH:mm:ss:SSS
SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("HH:mm:ss:SSS");
//将同一个Date转化为多种格式,用多个String来接收
String string = simpleDateFormat.format(date);
String string1 = simpleDateFormat1.format(date);
String string2 = simpleDateFormat2.format(date);
String string3 = simpleDateFormat3.format(date);
//打印各个字符串
System.out.println("String: " + string);
System.out.println("String1: " + string1);
System.out.println("String2: " + string2);
System.out.println("String3: " + string3);
运行结果:
(3)String转为Date:通过调用parse()方法,系统会将字符串根据SimpleFormat对象指定的格式,提取出相对应的年份、月份、日份、小时、分钟、秒数、毫秒数的值,未选择的变量会采用标准基准时间(称为“纪元”),即1970年1月1日00:00:00 GMT。
// String -> Date 用SimpleDateFormat对象调用parse()方法,把想要转化的String对象作为参数传入
// String对象必须符合创建用SimpleDateFormat对象时作为参数传入的格式
string = "2020-2-3 2:3:3:2";
date = simpleDateFormat.parse(string);
System.out.println("Date:" + date);
string1 = "19934年10月23日 11时23分43秒";
date = simpleDateFormat1.parse(string1);
System.out.println("Date1:" + date);
string2 = "2020-2-3";
date = simpleDateFormat2.parse(string2);
System.out.println("Date2:" + date);
string3 = "2:3:3:2";
date = simpleDateFormat3.parse(string3);
System.out.println("Date3:" + date);
运行结果:
3、Calendar转化为long
直接用Calendar对象调用getTimeInMillis()方法,返回一个long值
// Calendar -> long
// 直接对Calendar对象调用getTimeInMillis()方法,返回一个long值
longTime = calendar.getTimeInMillis();
System.out.println("longTime: " + longTime);
运行结果:
4、Calendar和Date互转
Calendar拥有long类型的Time属性来存储时间。
(1)Calendar转为Date:直接让Calendar对象调用getTime()方法,系统会将Calendar对象的long类型的Time属性转化为Date对象并返回。
// Calendar -> Date
// 直接让Calendar对象调用getTime()方法,返回一个Date对象
date = calendar.getTime();
System.out.println("Date:" + date);
运行结果:
(2)Date转为Calendar:
直接让Calendar对象调用setTime()方法,系统会将Date对象转换为long类型的值并赋予Calendar对象的long类型的Time属性,以此达到改变Calendar对象的时间。
// Date -> Calendar
// 直接对Calendar对象调用setTime方法,传入一个Date对象的参数,设置Calendar对象的属性
// 其原理是将输入的Date对象转化为long值,再将这个long值作为参数传入setTimeInMillis()方法,
// 传入的long值作为Calendar对象的时间来存储
calendar.setTime(date);
System.out.println("Calendar: " + calendar.toString());
System.out.println("Calendar.getTimeInMillis(): " + calendar.getTimeInMillis());
System.out.println("date.getTime():"+date.getTime());
运行结果: