JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

「案例学习」Java8 日期时间

wys521 2024-11-24 22:49:45 精选教程 38 ℃ 0 评论

1.创建当前时间

// 输出: 2021-07-10T17:41:29.802Z (下同)
Instant instantNow = Instant.now();

//2021-07-11
LocalDate localDateNow = LocalDate.now();

// 01:41:29.826
LocalTime localTimeNow = LocalTime.now();

//2021-07-11T01:41:29.826
LocalDateTime localDateTimeNow = LocalDateTime.now();

//2021-07-11T01:41:29.827+08:00[Asia/Shanghai]
ZonedDateTime zonedDateTimeNow = ZonedDateTime.now();

//2021
Year year = Year.now();

//2021-07
YearMonth yearMonth = YearMonth.now();

//--07-11
MonthDay monthDay = MonthDay.now();

2.创建指定时间

// 创建:2018 年 8 月 8 日
 //输出:2018-08-08 (下同)
LocalDate.of(2018,8,8);

//晚上 8 点 0 分 0 秒
//20:00
LocalTime.of(20,0);

//2018 年 8 月 8 日下午 8 点 0 分
LocalDateTime.of(2018,8,8,20,0);//2018-08-08T20:00

3.增减日期、时间

//2016 年 2 月 13 日
LocalDate ld = LocalDate.of(2016,2,13);
// 计算 4 天后的时间
ld.plusDays(4);
//计算当前时间的 3 周后的时间
LocalDate.now().plusWeeks(3);
//计算当前时间 5 个月后的时间
LocalDate.now().plusMonths(5);
//计算当前时间 2 年后的时间
LocalDate.now().plusYears(2);

//8 点 14 分 39 秒 218 纳秒
LocalTime time = LocalTime.of(8,14,39,218);
//计算当前时间 500 纳秒后的时间
LocalTime.now().plusNanos(500);
//计算当前时间45秒后的时间
LocalTime.now().plusSeconds(45);
//计算当前时间19分钟后的时间
LocalTime.now().plusMinutes(19);
//计算当前时间3小时后的时间
LocalTime.now().plusHours(3);

注:减少使用 minusXXX ,用法相同

4.其他增减日期时间方法

//今天程序员小张查看自己的车辆保险记录的时候看到还有比 2 年 3 月 8 天就到期了,计算到期时间是什么时候。
LocalDateTime.now().plusYears(2).plusMonths(3).plusDays(8);
//或
Period period = Period.of(2,3,8);//来表示一段时间,三个参数代表年月日
LocalDateTime.now().plus(period);

//结婚10年称为锡婚,2020年2月2日11点11分11秒称为对称日,很多情侣准备在那天结婚,如果在那天结婚了,那么锡婚会发生在什么时候?
LocalDateTime.of(2020,2,2,11,11,11).plus(1,ChronoUnit.DECADES)

//加一个半天
LocalDateTime.now().plus(1,ChronoUnit.HALF_DAYS);

5.修改日期、时间

案例1:

//修改为1号
LocalDateTime.now().withDayOfMonth(1); 

//修改为1号
LocalDateTime.now().with(ChronoField.DAY_OF_MONTH,1);  

案例2:

LocalDate now = LocalDate.now();

//修改时间为当月第一天
now.with(TemporalAdjusters.firstDayOfMonth());

//修改时间为下个月的第一天.
LocalDate firstDayoOfNextMonth = now.with(TemporalAdjusters.firstDayOfNextMonth());

//修改时间为下一年的第一天.
LocalDate firstDayofNextYear = now.with(TemporalAdjusters.firstDayOfNextYear());

//修改时间为本年的第一天.
LocalDate firstDayofYear = now.with(TemporalAdjusters.firstDayOfYear());

//修改时间为本月的最后一天.
LocalDate lastDayofMonth = now.with(TemporalAdjusters.lastDayOfMonth());

//修改时间为本年的最后一天.
LocalDate lastDayofYear = now.with(TemporalAdjusters.lastDayOfYear());

案例3:

//将当前时间改为下一个周日
LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY));

//将当前时间该上一个周三
LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY));

案例4:

//假如员工一个月中领取工资,发薪日是每月15号,如果发薪日时周末,则调整为周五。
 LocalDate date = LocalDate.of(2021,5,15).with(d->{
            LocalDate readyDay = LocalDate.from(d);
            readyDay = readyDay.withDayOfMonth(15);
            if(readyDay.getDayOfWeek()== DayOfWeek.SUNDAY||readyDay.getDayOfWeek()==DayOfWeek.SATURDAY){
                readyDay = readyDay.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));
            }
            return readyDay;
        });

案例5:

//计算当前时间距离下一个劳动节还有多少天?
Long  days = LocalDate.of(2021,4,1).query(d->{
            //1.TemporalAccessor是LocalDate和LocalDateTime的顶级父接口,相当于LocalDate就是这个接口的实现类,将temporal转换为LocalDate进行使用.
            LocalDate now = LocalDate.from(d); //now -> 2020 - 1 - 17
            //2.封装当年的劳动节时间,年份: now来获取,月份:Month.MAY,日期:1.
            LocalDate laborDay = LocalDate.of(now.getYear(), Month.MAY,1);//laborDay -> 2020 - 5
            //2.1.判断当前时间是否已经超过了当年的劳动节,如果超过了当年的劳动节,则laborDay+1年.
            if (now.isAfter(laborDay)) {
                laborDay = laborDay.plusYears(1);
            }
            //3.通过Chronounit的between方法来计算两个时间点的差额.
            return ChronoUnit.DAYS.between( now,laborDay);
        });

6.日期类之间的转换

案例1: java.util.Date 转换为 java.time.LocalDate

Date date= new Date();
Instant i = date.toInstant();
ZonedDateTime z = i.atZone(ZoneId.systemDefault());
LocalDate d = z.toLocalDate();

案例2:java.sql.Date转换为java.time.LocalDate

Date date= new Date(System.currentTimeMillis());
date.toLocalDate();

案例3:java.sql.Timestamp 转换为java.time.LocalDate

Timestamp  date= new Timestamp(System.currentTimeMillis());
date.toLocalDateTime();

案例4:使用java.sql.Date类将java.util.Date转换为java.time.LocalDate

Date d= new Date();
java.sql.Date date = new java.sql.Date(d.getTime());
date.toLocalDate();

案例5:将Calendar 转换为java.time.ZonedDateTime

//1.初始化calendar对象.
Calendar cal = Calendar.getInstance();
//2.calendar对象自Java1.1版本开始提供了一个方法用于获取时区对象getTimezone方法,要将calendar转换为zonedDateTime对象需要先获取到时区对象,
TimeZone timezone = cal.getTimeZone();
//3.从Java1.8开始Timezone类提供一个方法可以获取到ZoneId ->拿zoneTd对象来构建
ZoneId zoneId = timezone.toZoneId();
//4.ZonedDateTime类有一个ofInstant方法,可以将一个Instant对象和ZoneId对象封装为一个ZonedDateTime.
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(cal.toInstant(), zoneId);

7.日期时间格式化和解析

案例1:

LocalDateTime now = LocalDateTime.now();
//输出:2021-07-07(下同)
String s1 = now.format(DateTimeFormatter.ISO_DATE);

//2021-07-07T07:09:21.056
String s2= now.format(DateTimeFormatter.ISO_DATE_TIME);

//解析
LocalDateTime time = LocalDateTime.parse(s2);

案例2:

LocalDateTime now = LocalDateTime.now();
now.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));//2021年7月7日 星期三
now.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));//2021年7月7日
now.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM));//2021-7-7
now.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT));//21-7-7

案例3:

LocalDateTime d= LocalDateTime.of(1998,3,18,17,19,28);
//输出:1998-03月-18---17:19分28秒
d.format(DateTimeFormatter.ofPattern("yyyy-MM月-dd---HH:mm分ss秒"));

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表