时间:
首先,在计算机里,标准的时间为格林尼治天文台的时间-----格林尼治时间
中国所在的时区为:东八区
时间戳:
1970年1月1日零时零点零分零秒到今天的毫秒数
1s=1000ms,1min=60s,1h=60min,1day=24h
时间戳在全世界都是固定的,以格林尼治时间为准
系统时间戳:System.currentTimeMillis();
日期类:Date
获取当前系统日期时间:
Date data=new Date();
System.out.println(data);
运行结果:
获取毫秒数: | |
返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒数 。返回值为long | |
对象是否在参数日期后 | |
如果date1在date2后则返回true,反之返回false。 | |
对象是否在参数日期之前 | |
如果date1在date2之前则返回true,反之返回false。 | |
两个日期进行比较 | |
如果参数Date等于此Date,则值为0 ; 如果此日期在Date参数之前,该值小于0 ; 如果此日期在Date参数0 则值大于0 。 |
返回负数时,说明调用者时间是在参数时间之前
当返回0时,说明调用者时间和参数时间相同
当返回正数,说明调用者时间是在参数时间之后
Calender:日历类、日期时间
Calender是一个抽象类,不能创建对象
初始化:
提供了一组对“年月日时分秒星期”等信息的操作函数。操作不同时区的信息。
JDK1.1版本开始,在处理时间和日期时,系统推荐使用calender类。
Calender本身比Date强大得多
获取当前时间:
Calendar c=Calendar.getInstance();
System.out.println(c.getTime());//返回的是Date型
以毫秒为单位返回此日历的时间值。返回值为Long | |
转换为Instant | |
TimeZone:时区
获取时区 | |
获取主机的默认时区 | |
ZoneId:
getId()---获取时区ID
设置时区:
ZoneId zoneId= ZoneId.of("America/New_York");
日期格式化:
SimpleDateFormat
format:格式化date类型,把Date类型转成String类型我们要展示数据到客户端
parse:把String类型的时间,转成Date类型从客户端传过来的时间,一般都是String类型。存入数据库
Date date=new Date; SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss.SSS"); System.out.println(sdf.format(date));
例题:
设计一个工具类:
可以对Date类型的日期进行格式化,转成String,format方法
可以对String类型的日期进行格式转换,转换成Date,parse方法,参数时String ,返回值是Date
方法类:
public class Ch01 {
private static final SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss.SSS");
public static final String in(Date date){
return sdf.format(date);
}
public static final Date on(String date) throws Exception{
return sdf.parse(date);
}
}
Demo测试类:
public class Demo {
public static void main(String[] args) throws Exception{
System.out.println( Ch01.in(new Date()));
System.out.println( Ch01.on("2002年01月22日 12:02:12.253"));
}
}
以上时间日期类都是在JDK8之前的。
但是会有一些问题:
比如:Date和Calender,获取到的月份都是0-11,而不是我们生活中的1-12
所以根据阿里规约的明确要求:
如果是JDK8的应用
Instant代替Date
LocalDateTim代替Calender
DateTimeFormatter代替SimpleDateFormat
Instant:
获取当前时间(依照美国时间算) | Instant instant=Instant.now(); |
获取秒数 | instant.getEpochSecond(); |
获取毫秒数(返回的是long类型) | instant.toEpochMilli() |
Duration持续时间(显示七天后的日期) | instant.plus(Duration.ofDays(7)); |
LocalDate/LocalTime:获取日期/获取时间
LocalDate localdate=LocalDate.now();
获取年 | getYear(); |
获取月 | getMonth(); |
判断是否为闰年 | isLeapYear(); |
LocalDate of=LocalDate.of(2024,9,10);可以定义一个日期,用of.isLeapYear(),判断是否为闰年
DateTimeFormatter:修改规范
LocalDateTime l= LocalDateTime.now();
DateTimeFormatter dateTimeFormatter= DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss.SSS");
System.out.println(l.format(dateTimeFormatter));
DateTimeFormatter是单例的,一次只能用一个。
日期类型建的转换:
Instant instant=Instant.now();
System.out.println(instant);
//把instant转成Date
Date date=Date.from(instant);
//把Date转成Instant
Instant toInstant=date.toInstant();
//把Instant转成LocalDateTime
LocalDateTime l=LocalDateTime.ofInstant(instant,ZoneId.systemDefault());
//把LocalDateTime转成Instant
Instant toL=LocalDateTime.now().toInstant(ZoneOffset.UTC);
// Demo22 demo=new Demo22();
// demo.dateToString(date);
//把date转成LocalDateTime
Date date1=new Date();
LocalDateTime ll=LocalDateTime.ofInstant(date1.toInstant(),ZoneId.systemDefault());
//把LocalDateTime转成date
LocalDateTime now=LocalDateTime.now();
ZonedDateTime zonedDateTime=now.atZone(ZoneId.systemDefault());
Instant instant1=zonedDateTime.toInstant();
Date date2=Date.from(instant1);