1.日期类Date
1.1概述
Java提供了Date类来处理日期、时间,Date对象既包含日期,也包含时间。该类从JDK 1.0起就开始存在了,但正因为它历史悠久,所以它的大部分构造器、方法都已经过时,不再推荐使用了。
过时(Deprecated)是指:Java不再推荐使用,如果非要使用不再推荐的构造器或方法,编译器会提出警告信息,并可能会导致程序性能、安全性等方面的问题 。
1.2创建对象
Date类提供了6个构造器,其中4个已经过时,剩下的两个构造器来实例化Date对象。
Date()
//无参构造,使用当前日期和时间来初始化Date对象,即Date对象包含的是当前日期时间
//底层调用System.currentTimeMillis()获得long整数作为日期参数。
Date( long milliSec )
//接收从1970年1月1日0:0:0 GMT起的毫秒数来初始化Date对象,即Date包含的是: 1970年1月1日0:0:0加上毫秒数后的日期时间
//其他构造方法已过时
开发时使用Date类要导包,注意是 java.util.Date,不是java.sql.Date。
创建日期对象示例:
public static void main(String[] args) {
Date d = new Date( ); //创建包含当前日期时间的Date对象
Date d2 = new Date( 1000 * 60 * 60 ); //创建包含指定毫秒值的Date对象
System.out.println( d ); //Thu Mar 18 16:22:13 CST 2021
System.out.println( d2 ); //Thu Jan 01 09:00:00 CST 1970
System.out.println( d2.getTime() ); //获取从1970年1月1日起的毫秒值
}
1.3常用方法
long getTime():
//返回从1970年1月1日 00:00:00 GMT 到该Date对象之间的时间差,以毫秒作为单位
void setTime( long milliSec ):
//设置此 Date对象 从 1970年1月1日00:00:00 GMT 的毫秒值。
?
int compareTo(Date anotherDate):
//比较当前日期时间 和 参数中表示的日期时间的先后顺序
//如果 [当前日期] 比 [参数中的日期] 早, 返回 -1;
//如果 [当前日期] 比 [参数中的日期] 晚, 返回 1;
//如果 [当前日期] 和 [参数中的日期] 相同, 返回 0;
int getYear()://获取此Date对象中包含的年份,已过时,不建议使用
int getMonth()://获取此Date对象中包含的月份,已过时,不建议使用
int getHours()://获取此Date对象中包含的月份,已过时,不建议使用
//......
测试上述方法:
public static void main(String[] args) {
//测试setTime和getTime方法
Date d3 = new Date( );
System.out.println( d3 ); //Thu Mar 18 16:43:50 CST 2021
System.out.println( d3.getTime() ); //1616057030304
d3.setTime( 1000 * 60 * 60 );
System.out.println( d3 ); //Thu Jan 01 09:00:00 CST 1970
System.out.println( d3.getTime() ); //3600000
System.out.println( "-----------------------" );
//测试compareTo方法
Date d4 = new Date( 1000 * 60 * 60 );
Date d5 = new Date( 2000 * 60 * 60 );
System.out.println( d4.compareTo( d5 ) ); //-1
System.out.println( d5.compareTo( d4 ) ); //1
System.out.println( d5.compareTo( d5 ) ); //0
//下面过时的方法直接忽略即可,不需要掌握
System.out.println( d4.getYear() ); //70,年份后两位
System.out.println( d4.getMonth() ); //0,月份从1开始
System.out.println( d4.getHours() ); //10
}
2.SimpleDateFormat
2.1概述
SimpleDateFormat是一个用于日期解析与格式化的类
它可以将Date对象格式化成字符串,也可以将日期字符串解析成Date对象。
2.2创建对象
SimpleDateFormat()
//用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
SimpleDateFormat(String pattern)
//用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
代码示例:
//创建默认格式和符号的SimpleDateFormat实例
SimpleDateFormat sdf = new SimpleDateFormat();
?
//创建指定格式和符号的SimpleDateFormat实例
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
其中 “yyyy-MM-dd HH:mm:ss” 是自定义的日期时间转换格式,每个字母的作用如下:
y: 表示年份,yyyy则表示年份为4位,如: 2020年
M: 表示月份,MM则表示月份为两位,如: 03月
d: 一个月中的日期,dd则表示天数为两位,如:21号
H: 一天中的小时, H是24小时制, h是12小时制
m: 分钟数
s: 秒数
S: 毫秒数
E: 星期几
...
2.3常用方法
String format(Date date)
//按照一定的模式 将一个Date对象格式化为日期/时间字符串。
?
Date parse(String source)
//按照一定的模式,将一个字符串解析成一个Date对象。
public static void main(String[] args) throws Exception {
//1.将当前日期时间按下面的格式, 转成一个字符串
SimpleDateFormat sdf3 =
new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss" );
Date d2 = new Date();
System.out.println( sdf3.format( d2 ) );//2021/03/18 23:48:40
//2.将下面的日期时间字符串, 解析成一个Date对象
String dateStr = "2020年12月24日 13时25分39秒";
SimpleDateFormat sdf4 =
new SimpleDateFormat( "yyyy年MM月dd日 HH时mm分ss秒" );
System.out.println( sdf4.parse( dateStr ) );
//Thu Dec 24 13:25:39 CST 2020
}
2.4案例:计算存活时间
根据用户输入的出生日期,计算用户的存活时间
实现思路:
1)定义日期格式化对象(比如:时间格式为:yyyy/MM/dd)
2)提示用户按照指定的格式输入出生年月日,并接收
3)将该用户输入的年月日字符串 转成Date对象
4)获取该用户从 1970年1月1日 到 用户出生时 的时间毫秒值
5)获取该用户从 1970年1月1日 到 此时此刻 的时间毫秒值
6)计算该用户一共所存活的时间毫秒值(begin-end)
7)计算用户存活的时间
代码示例:
public static void main(String[] args) throws Exception {
//定义日期格式化对象(比如:时间格式为:yyyy/MM/dd)
String pattern = "yyyy/MM/dd";
SimpleDateFormat sdf = new SimpleDateFormat( pattern );
?
//提示用户按照指定的格式输入出生年月日,并接收
System.out.println( "请输入您的出生年月日, 以"+pattern+"隔开:" );
String birthStr = new Scanner(System.in).nextLine();
?
//将该用户输入的年月日字符串 转成Date对象
Date birth = sdf.parse( birthStr );
//获取该用户从 1970年1月1日 到 用户出生时 的时间毫秒值
long begin = birth.getTime();
//获取该用户从 1970年1月1日 到 此时此刻 的时间毫秒值
long now = System.currentTimeMillis();
//计算该用户一共所存活的时间毫秒值
long total = now - begin;
//计算该用户一共活了多少年
int year = (int) (total / ( 1000L*60*60*24*365) );
//计算该用户一共活了多少天
int day = (int) (total / ( 1000L*60*60*24 ) );
//计算该用户一共活了多少小时
int hour = (int)( total / ( 1000*60*60 ) );
//计算该用户一共活了多少分钟
int minute = (int) ( total / ( 1000*60 ) );
System.out.println( "您一共存活了:[ "+year+" ]年" );
System.out.println( "您一共存活了:[ "+day+" ]天" );
System.out.println( "您一共存活了:[ "+hour+" ]小时" );
System.out.println( "您一共存活了:[ "+minute+" ]分钟" );
}