时间类相关记录
Data类(Java.util.Date)
- 使用的构造器-> 空参 对象值为当前时间格式如下
- 使用的方法-> .getTime 方法返回值为1970年距今的毫秒数与
System.currentTimeMillis()
异曲同工之妙
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
long time = date.getTime();
System.out.println(time);
}
>>> Tue May 19 00:48:01 CST 2020
>>> 1589820481115
Instance
表示时间线上的一个瞬时点。 概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC开始的秒数。)
public void test_2(){
/*
* 静态方法now()返回Instant对象(此为UTC时区在本初子午线)
* 而北京时间处于东八区即比UTC多了八个小时
* (例如:北京时间在1月1号早上八点的09:00,
* 则UTC时区下的时间为1月1日的早上01:00)
*/
Instant instant = Instant.now();
//设置偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
//把Instant对象转化为时间戳
long l = instant.toEpochMilli();
//把lang型时间戳转化为Instant对象
Instant instant1 = Instant.ofEpochMilli(l);
}
LocalDate、LocalDateTime、LocalTime
LocalDate
、LocalDateTime
、ocalTime
方法大同小异
public void test_3(){
//获取本地当前时间
LocalDate now = LocalDate.now();
//设置时间
LocalDate date = LocalDate.of(2020, 5, 20);
//获取对象此时为本月的第几天
int dayOfMonth = date.getDayOfMonth();
System.out.println("本月的第"+dayOfMonth + "天");
//获取对象此时为本年的第几天
int dayOfYear = date.getDayOfYear();
System.out.println("本年的第"+dayOfYear + "天");
//获取星期几(以枚举类型返回)
DayOfWeek dayOfWeek = date.getDayOfWeek();
System.out.println("星期:" + dayOfWeek);
//修改年、月、日
System.out.println("针对此对象修改的原时间:" + date);
//改为对象此年的第几天
LocalDate date1 = date.withDayOfYear(365);
System.out.println(date1);
//改为对象此月份的第几天
LocalDate date2 = date.withDayOfMonth(8);
System.out.println(date2);
//重新设置本对象的年份
LocalDate date3 = date.withYear(2008);
System.out.println(date3);
//重新设置本对象的月份
LocalDate date4 = date.withMonth(8);
System.out.println(date4);
}
>>> 本月的第20天
>>> 本年的第141天
>>> 星期:WEDNESDAY
>>> 针对此对象修改的原时间:2020-05-20
>>> 2020-12-30
>>> 2020-05-08
>>> 2008-05-20
>>> 2020-08-20
/*
* 补充
* 获取当前对象月份
* getMonthValue()
*
* 获得当前对象的小时、分钟、秒
* getHour()getMinute()getSecond()
*
* 从当前对象加几年、几月、几周、几天、几小时
* plusYears() plusMouths() plusWeeks() plusDays() plusHours()
*
* 从当前对象减几年、几月、几周、几天、几小时
* minusYears() minusMonths() minusWeeks() minusDays() minusHours()
*/
解析与格式化DataTimeFormatter
public void test_4(){
//ofPattern("yyyy-MM-dd hh:mm:ss")
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-----MM------dd");
String format = formatter.format(LocalDate.now());
System.out.println(format);
TemporalAccessor parse = formatter.parse("2000-----09------23");
System.out.println(parse);
}
>>> 2020-----05------19
>>> {},ISO resolved to 2000-09-23
//解析字符串 -> 相应的时间类
String s = "03-05-2012";
LocalDate parse_date = LocalDate.parse(s,DateTimeFormatter.ofPattern("MM-dd-yyyy"));
System.out.println( parse_date);
>>> 2012-03-05
带时区的日期时间:ZonedDateTime、ZoneId
public void test_5(){
//getAvailableZoneIds():获取所的ZoneId
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
for(String s : zoneIds){
System.out.println(s);
}
System.out.println();
//获取“Asia/Tokyo”时区对应的时间
LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(localDateTime);
}
public void test_6(){
//now():获取本时区的ZonedDateTime对象
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime);
//now(ZoneId id):获取指定时区的ZonedDateTime对象
ZonedDateTime zonedDateTime1 = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(zonedDateTime1);
}
时间间隔:Duration–用于计算两个“时间”间隔,以秒和纳秒为基准
public void test_7(){
LocalTime now = LocalTime.of(8,15,0);
System.out.println(now);
LocalTime time = LocalTime.of(20, 20, 0);
System.out.println(time);
Duration between_duration = Duration.between(now, time);
System.out.println(between_duration);
long toHours = between_duration.toHours();
long toMillis = between_duration.toMillis();
long toMinutes = between_duration.toMinutes();
System.out.println("两者小时间隔:" + toHours);
System.out.println("两者分钟间隔:" + toMinutes);
System.out.println("两者秒数间隔:" + toMillis);
}
>>> 08:15
>>> 20:20
>>> PT12H5M
>>> 两者小时间隔:12
>>> 两者分钟间隔:725
>>> 两者秒数间隔:43500000
日期间隔:Period --用于计算两个“日期”间隔,以年、月、日衡量
public void test_8(){
LocalDate localDate = LocalDate.now();
LocalDate localDate1 = LocalDate.of(2028, 3, 18);
Period period = Period.between(localDate, localDate1);
System.out.println("时间间隔:" + period);
System.out.println("时间间隔年数:" + period.getYears());
System.out.println("时间间隔月数:" + period.getMonths());
System.out.println("时间间隔天数:" + period.getDays());
//返回设置间隔指定的年、月、日数以后的Period对象
Period period1 = period.withYears(2);
System.out.println(period1);
}
>>> 时间间隔:P7Y9M28D
>>> 时间间隔年数:7
>>> 时间间隔月数:9
>>> 时间间隔天数:28
>>> P2Y9M28D
日期时间校正器:TemporalAdjuster
public void test_9(){
//获取当前日期的下一个周日是哪天?
TemporalAdjuster temporalAdjuster = TemporalAdjusters.next(DayOfWeek.SUNDAY);
LocalDateTime localDateTime = LocalDateTime.now().with(temporalAdjuster);
System.out.println(localDateTime);
//获取下一个工作日是哪天?
LocalDate localDate = LocalDate.now().with(new TemporalAdjuster(){
@Override
public Temporal adjustInto(Temporal temporal) {
LocalDate date = (LocalDate)temporal;
if(date.getDayOfWeek().equals(DayOfWeek.FRIDAY)){
return date.plusDays(3);
}else if(date.getDayOfWeek().equals(DayOfWeek.SATURDAY)){
return date.plusDays(2);
}else{
return date.plusDays(1);
}
}
});
System.out.println("下一个工作日是:" + localDate);
}
>>> 2020-05-24T23:02:44.489
>>> 下一个工作日是:2020-05-20