java8.0api中文文档_Java8日期Api,看完你再也回不去了!

需求

需求: 给你一个时间格式(yyyy-MM-dd) 你给我返回这个时间前一个月的时间戳,前一天的时间戳,前一周的时间戳

我:????

Java8的新API你用了,你会发现你再也回不去了?

不多说上代码

/**

* @author :hujiansong

* @date :2019/6/24 17:59

* @since :1.8

*/

public class NewDateTimeAPI {

private static long getTimestamp(String dateText){

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd");

// 解析成java8 日期

LocalDate parse = LocalDate.parse(dateText, pattern);

// 解析成java8 日期时间(只有日期时间才有时间戳)

LocalDateTime dateTime = LocalDateTime.of(parse, LocalTime.of(0, 0));

// 转换成时间戳

return dateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();

}

public static void main(String[] args) {

long lastMonthTimestamp = getTimestamp("2018-11-12");

System.out.println(lastMonthTimestamp);

}

}

可以看到很简单:

主要是三步:

格式化成日期

日期变成日期时间

日期时间通过atZone()确定时区,转换成Instant,最后转换成时间戳

接下来骚操作来了。

获取上一个月时间戳:

private static long getLastMonthTimestamp(String dateText){

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd");

// 解析成java8 日期

LocalDate parse = LocalDate.parse(dateText, pattern);

// 解析成java8 日期时间(只有日期时间才有时间戳)

LocalDateTime dateTime = LocalDateTime.of(parse, LocalTime.of(0, 0));

// 获取上一个月时间戳

dateTime = dateTime.minusMonths(1);

// 转换成时间戳

return dateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();

}

只需要加一行代码 dateTime.minusMonths(1);

同理,相同的获取前一天,前一周,具体调用不同的方法。

minusDays()

minusHours()

minusMinutes()

minusSeconds()

最骚的还有一个,就是可以指定特定的时间:

private static long specialDate(String dateText) {

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd");

// 解析成java8 日期

LocalDate parse = LocalDate.parse(dateText, pattern);

// 解析成java8 日期时间(只有日期时间才有时间戳)

LocalDateTime dateTime = LocalDateTime.of(parse, LocalTime.of(0, 0));

// 获取当前日期的12点0分0秒的时间戳

dateTime = dateTime.withHour(12)

.withMinute(0)

.withSecond(0);

// 转换成时间戳

return dateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();

}

获取特定小时分钟秒的时间戳。

withHour()

withMinute()

withSecond()

时间戳转换为特定格式日期

public static String ts2Str(long second){

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(second), ZoneId.systemDefault());

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

String format = localDateTime.format(pattern);

return format;

}

时间戳转换为Instant,然后从Instant转换为LocalDateTime,最后format即可。

总结

时间戳转日期:使用Instant.ofEpochSecond()转换为 Instant,然后调用LocalDateTime.ofInstant()获取时间日期对象

注意:时间戳只能针对LocalDateTime,LocalDate是不具备时间戳的。

LocalDate要想转成可以采用LocalDateTime,可以调用LocalDateTime.of(localDate, LocalTime.of(0, 0));

字符串转日期:如果是yyyy-MM-dd时间格式,那么采用LocalDate.parse(),如果是yyyy-MM-dd HH:mm:ss那么采用LocalDateTime.parse()

转换成了LocalDateTime或者LocalDate那么就可以调用具体的方法,去操作日期了。你就会发现你再也回不去了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值