JAVA 8 新日期和时间API 学习总结

昨天学了Java8新的时间日期api,以前我们做时间计算大多涉及Date,Calendar类,现在几乎全部有了替代的API,使用更加简单易用,通过几个例子记录一下。

1.取得瞬间点

System.currentTimeMillis()

以前我们为了测试程序性能,会用下面的语句拿到当前时间的瞬间点,然后前后做减法,得出毫秒值,现在有了专门的Instant类替代。

// 代替System.currentTimeMillis()
//Instant主要是表示一个瞬时点在时间线上
Instant start = Instant.now();
for (int i = 0; i < 100000000; i++) {
}
Instant end = Instant.now();

Duration between = Duration.between(start, end);
long l = between.toMillis();
System.out.println("程序执行了" + l + "毫秒");

Duration类可以表示两个时间点之间的时间量。这里用toMillis可以转换成毫秒,你也可以用转换成小时,分,秒等。

2.本地时间
以前日期计算 用Calendar类,现在有LocalDate,LocalDateTime,LocalTime。LocalDate有日期没时间,LocalDateTime有日期时间,LocalTime没日期有时间,它们都是不带时区概念的。

plusDays()和minusDays()可以随意加减日期

//代替 Calendar
LocalDate now = LocalDate.now();
System.out.println("今天的日期" + now.toString());
LocalDate after5days = now.plusDays(5);
System.out.println("五天后的日期" + after5days.toString());

新的api计算今天是星期几更加符合人类的思维,星期一返回就是1,星期天返回7

//计算今天是星期几
int value = now.getDayOfWeek().getValue();

switch (value) {
    case 1:
        System.out.println("今天星期一");
        break;
    case 2:
        System.out.println("今天星期二");
        break;
    case 3:
        System.out.println("今天星期三");
        break;
    case 4:
        System.out.println("今天星期四");
        break;
    case 5:
        System.out.println("今天星期五");
        break;
    case 6:
        System.out.println("今天星期六");
        break;
    case 7:
        System.out.println("今天星期日");
        break;
    default:
        System.out.println("出错了");
}

计算下一个星期五等简单的逻辑操作也有专门的api可以直接调用,主要依赖TemporalAdjusters提供的一些静态方法。

//计算下个星期五(从今天开始算,如果今天是星期五,就会返回今天的日期)
//LocalDate不带时区概念
LocalDate nextFriday = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
System.out.println("下一个星期五是:" + nextFriday);

//计算这个月的第一天
LocalDate firstDayOfMonth = now.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("这个月的第一天是:" + firstDayOfMonth);

3.格式化日期和解析日期

格式化主要依靠DateTimeFormatter类,你可以给它自定义格式,它帮你格式化字符串,或从字符串解析成日期,
用的时候注意LocalDate,LocalDateTime,LocalTime三个类有些不带日期和时间,不然解析或格式化的时候会报错。

格式化的规范:
这里写图片描述

//格式化时间
LocalDateTime now1 = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分");
String formatTime = formatter.format(now1);
System.out.println("格式化的时间" + formatTime);

//字符串转时间
LocalDateTime parse = LocalDateTime.parse("2017年03月06日 06时56分32秒", DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"));
System.out.println("解析的时间" + parse);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值