日期Date
1.Date类
注意:是java.util.Date;(而非 java.sql.Date,此类是给数据库访问的时候使用的)
2.时间原点
对应的日期:1970年1月1日 早上8点0分0秒
为什么是8点?因为中国的太平洋时区是UTC-8,刚好和格林威治时间差8个小时。
为什么对应1970年?因为1969年发布了第一个 UNIX 版本:AT&T,综合考虑,当时就把1970年当做了时间原点。
注:所有的日期,都是以为这个0点为基准,每过一毫秒,就+1。
举例:
Date date = new Date();
long time = date.getTime();
System.out.println(time);
//输出的是1649921123440 1970-01-01 00:00:00到程序运行的时候的时间的毫秒数
long millis = System.currentTimeMillis();
System.out.println(millis);
//另一种写法 也是获取原点到现在的毫秒数
3.get获取年月日时分秒
举例:
getYear 年
getMonth 月
getDate 日
getHours 时
getMinutes 分
getSeconds 秒
getDay 周
//日期字符串
StringBuilder datetext = new StringBuilder();
Date date = new Date();
int year = date.getYear();
//因为时间最开始是从1900年开始算的 所以输出的是122年 所以如果要得到今年的数字的话 就得加上1900
datetext.append(year+1900+"年");
int month = date.getMonth()+1;
datetext.append(month< 10? "0"+month+"月":month+"月");
int day = date.getDate();
datetext.append(day<10? "0"+day+"日":day+"日");
int hours = date.getHours();
datetext.append(hours<10? " 0"+hours+"时":" "+hours+"时");
int minutes = date.getMinutes();
datetext.append(minutes<10? "0"+minutes+"分":+minutes+"分");
int seconds = date.getSeconds();
datetext.append(seconds<10? "0"+seconds+"秒":+seconds+"秒");
//周的话 比较特殊 没有指定的方法直接获取 但可以转换一下
String week = " 星期";
switch (dayofweek){
case 1 -> week+="一";
case 2 -> week+="二";
case 3 -> week+="三";
case 4 -> week+="四";
case 5 -> week+="五";
case 6 -> week+="六";
default -> week+="日";
}
datetext.append(week);
4.SimpleDateFormat 日期格式化类
y 代表年
M 代表月
d 代表日
H 代表24进制的小时
h 代表12进制的小时
m 代表分钟
s 代表秒
S 代表毫秒
举例:
@Test
public void test03(){
//日期格式化字符串
Date date = new Date();
//实例化一个时间字符串格式对象 并传入时间字符串模板
//2022-04-14 15:10:33
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dateFormat);
}
5.parse字符串转日期(反解析字符串)
反解析必须用到Try。。。 catch
举例:
//反解析字符串
String source = "1983-11-22 20:30:00";
try {
Date parse = dateFormat.parse(source);
System.out.println(parse);
} catch (ParseException e) {
throw new RuntimeException(e);
}
6.TimeZone 更改时区
举例:
Date date = new Date();
//2022-04-14 15:10:33
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
//将时区更改为日本
String format = dateFormat.format(date);
System.out.println(format);
//输出
7.isBefore和isAfter 对比时间早晚 返回布尔值
7.1手写
举例:
@Test
public void test04(){
//实例化一个时间字符串格式对象 并传入时间字符串模板
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String text01 = "1983-11-22 20:30:00"; //建立字符串
String text02 = "1988-10-08 20:30:00";
try {
Date date01 = dateFormat.parse(text01);//字符串反解析成时间
Date date02 = dateFormat.parse(text02);
boolean isBefore = date01.getTime() - date02.getTime() < 0?true:false; //时间对比
boolean isAfter = date01.getTime() - date02.getTime() > 0?true:false;
System.out.println(isBefore);//输出
System.out.println(isAfter);
7.2系统方法
public void test04(){
//实例化一个时间字符串格式对象 并传入时间字符串模板
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String text01 = "1983-11-22 20:30:00"; //建立字符串
String text02 = "1988-10-08 20:30:00";
try {
Date date01 = dateFormat.parse(text01);//字符串反解析成时间
Date date02 = dateFormat.parse(text02);
System.out.println(date01.before(date02));//直接利用方法对比后输出
System.out.println(date01.after(date02));
8.toGMTString和toLocaleString
toGMTString: 返回指定时区的时间 GMT为地区
toLocaleString:返回一个以当前区域设置的长默认格式编写的日期字符串(不同的区域设置和语言设置,执行的输出结果可能不同)。
@Test
public void test05(){
Date date = new Date();
System.out.println(date);
//指定时区的时间
String gmtString = date.toGMTString();
//转换为当地时间的字符串
String localeString = date.toLocaleString();
System.out.println(gmtString);
System.out.println(localeString);
}
9.getDefault 返回日期当前的默认值
// 输出当前系统默认时区sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null]
System.out.println(TimeZone.getDefault());