美文网首页
在实践中学习java(1)--JAVA8的LocalDateTi

在实践中学习java(1)--JAVA8的LocalDateTi

作者: 爱吃饭的小芒果 | 来源:发表于2020-11-12 22:41 被阅读0次

一、JAVA8的LocalDateTime

最近写自动化用例遇到一个时间问题。获取当年开始时间和结束时间。

从上网搜索了使用Calendar方式获取:

public StringgetYearStart(){//当年开始时间戳,毫秒

    Calendar calendar = Calendar.getInstance();// 获取当前日期

    calendar.add(Calendar.YEAR, 0);

    calendar.add(Calendar.MONTH, 0);

    calendar.add(Calendar.DATE, 0);

    calendar.set(Calendar.DAY_OF_YEAR, 1);

    calendar.set(Calendar.HOUR, -12);

    calendar.set(Calendar.MINUTE, 0);

    calendar.set(Calendar.SECOND, 0);

    Long time = calendar.getTimeInMillis();

    return String.valueOf(time);

}

//-------------------------------------------------------

public StringgetYearEnd(){//当年结束时间戳,毫秒

    Calendar calendar = Calendar.getInstance();// 获取当前日期

    calendar.add(Calendar.YEAR, 1);

    calendar.add(Calendar.DATE, 0);

    calendar.add(Calendar.MONTH, 0);

    calendar.set(Calendar.DAY_OF_YEAR, -1);

    calendar.set(Calendar.HOUR, 23);

    calendar.set(Calendar.MINUTE, 59);

    calendar.set(Calendar.SECOND, 59);

    calendar.set(Calendar.MILLISECOND, 999);

    Long time = calendar.getTimeInMillis();

    return String.valueOf(time);

}

但这个方法有个问题,中午12点前执行和12点后执行,返回的时间不一样,差12个小时。

12点前执行,返回:1577764800248(2019/12/31 12:0:0)、 1609343999999(2020/12/30 23:59:59)

12点后执行,返回:1577808000000(2020/1/1 0:0:0)、 1609430399999(2020/12/31 23:59:59)

解决办法:使用java8的LocalDate和LocalDateTime方式:

/**

* @Description:当天的开始时间

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetStartOrEndDayOfDay(LocalDate today, Boolean isFirst){

LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

if(isFirst){

return String.valueOf(LocalDateTime.of(today, LocalTime.MIN).toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

    }else{

return String.valueOf(LocalDateTime.of(today, LocalTime.MAX).toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

    }

}

/**

* @Description:本周的开始时间

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetStartOrEndDayOfWeek(LocalDate today, Boolean isFirst){

String time =MinTime;

    LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

DayOfWeek week = today.getDayOfWeek();

    int value = week.getValue();

    if (isFirst) {

resDate = today.minusDays(value -1);

    }else {

resDate = today.plusDays(7 - value);

        time =MaxTime;

    }

LocalDateTime localDateTime = LocalDateTime.parse(resDate.toString() + time);

    return String.valueOf(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

}

/**

* @Description:本月的开始时间

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetStartOrEndDayOfMonth(LocalDate today, Boolean isFirst){

String time =MinTime;

    LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

Month month = today.getMonth();

    int length = month.length(today.isLeapYear());

    if (isFirst) {

resDate = LocalDate.of(today.getYear(), month, 1);

    }else {

resDate = LocalDate.of(today.getYear(), month, length);

        time =MaxTime;

    }

LocalDateTime localDateTime = LocalDateTime.parse(resDate.toString() + time);

    return String.valueOf(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

}

/**

* @Description:本季度的开始时间

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetStartOrEndDayOfQuarter(LocalDate today, Boolean isFirst){

String time =MinTime;

    LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

Month month = today.getMonth();

    Month firstMonthOfQuarter = month.firstMonthOfQuarter();

    Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() +2);

    if (isFirst) {

resDate = LocalDate.of(today.getYear(), firstMonthOfQuarter, 1);

    }else {

resDate = LocalDate.of(today.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(today.isLeapYear()));

        time =MaxTime;

    }

LocalDateTime localDateTime = LocalDateTime.parse(resDate.toString() + time);

    return String.valueOf(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

}

/**

* @Description:本年度的开始时间

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetStartOrEndDayOfYear(LocalDate today, Boolean isFirst){

String time =MinTime;

    LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

if (isFirst) {

resDate = LocalDate.of(today.getYear(), Month.JANUARY, 1);

    }else {

resDate = LocalDate.of(today.getYear(), Month.DECEMBER, Month.DECEMBER.length(today.isLeapYear()));

        time =MaxTime;

    }

LocalDateTime localDateTime = LocalDateTime.parse(resDate.toString() + time);

    return String.valueOf(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

}

/**

* @Description:上个月的开始时间

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetStartOrEndDayOfLastMonth(LocalDate today, Boolean isFirst){

String time =MinTime;

    LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

today = today.minusMonths(1);

    Month month = today.getMonth();

    int length = month.length(today.isLeapYear());

    if (isFirst) {

resDate = LocalDate.of(today.getYear(), month, 1);

    }else {

resDate = LocalDate.of(today.getYear(), month, length);

        time =MaxTime;

    }

LocalDateTime localDateTime = LocalDateTime.parse(resDate.toString() + time);

    return String.valueOf(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

}

/**

* @Description:当天往前30天的开始和结束时间

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetBefore30Days(LocalDate today, Boolean isFirst){

LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

today = today.minusDays(30);

    if(isFirst){

return String.valueOf(LocalDateTime.of(today, LocalTime.MIN).toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

    }else{

return String.valueOf(LocalDateTime.of(today, LocalTime.MAX).toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

    }

}

/**

* @Description:当前往前12个月的开始时间-1号

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetBefore12Months(LocalDate today, Boolean isFirst){

String time =MinTime;

    LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

today = today.minusMonths(12);

    Month month = today.getMonth();

    int length = month.length(today.isLeapYear());

    if (isFirst) {

resDate = LocalDate.of(today.getYear(), month, 1);

    }else {

resDate = LocalDate.of(today.getYear(), month, length);

        time =MaxTime;

    }

LocalDateTime localDateTime = LocalDateTime.parse(resDate.toString() + time);

    return String.valueOf(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

}

/**

* @Description:当前往前6年的开始时间

* @Param: [today, isFirst: true 表示开始时间,false表示结束时间]

*/

public static StringgetBefore6years(LocalDate today, Boolean isFirst){

String time =MinTime;

    LocalDate resDate = LocalDate.now();

    if (today ==null) {

today = resDate;

    }

today = today.minusYears(6);

    if (isFirst) {

resDate = LocalDate.of(today.getYear(), Month.JANUARY, 1);

    }else {

resDate = LocalDate.of(today.getYear(), Month.DECEMBER, Month.DECEMBER.length(today.isLeapYear()));

        time =MaxTime;

    }

LocalDateTime localDateTime = LocalDateTime.parse(resDate.toString() + time);

    return String.valueOf(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

}

二、static关键字

在《Java编程思想》P86页有这样一段话:

“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”

这篇文章分析的特别好,可仔细阅读一遍:https://www.cnblogs.com/dolphin0520/p/3799052.html

相关文章

  • 在实践中学习java(1)--JAVA8的LocalDateTi

    一、JAVA8的LocalDateTime 最近写自动化用例遇到一个时间问题。获取当年开始时间和结束时间。 从上网...

  • Java8 LocalDate、Date、LocalDateTi

  • Java8 学习笔记

    @(in action系列)[java8, lambda, stream] Java8 学习 java8 能高效的...

  • Java8初探

    1、概述 1.1 为什么要学习java8 java8可以让我们编写更为简洁的代码 1.1.1 【示例1】lambd...

  • Java8学习笔记-1

    Java8学习笔记-1序在java11即将面世的时候,终于开始行动学习java8的特性。目前没有机会实践,只是跟着...

  • 2018-10-28

    Java8学习笔记-1序在java11即将面世的时候,终于开始行动学习java8的特性。目前没有机会实践,只是跟着...

  • java8 资料收集

    1.跟上Java8 - 带你实战Java8 https://zhuanlan.zhihu.com/java8 王爵...

  • Java8学习笔记目录

    Java8学习笔记 -- 接口的默认方法与静态方法 Java8学习笔记 -- Lambda表达式,Function...

  • JDK8 新特性学习笔记

    java8新特性学习 java8的特点 速度更快(修改了HasMap、HasSet、CurrentHasMap等存...

  • Java8体验

    最近开始研究Java8,现将其体验分享如下: 1.为什么需要使用Java8 1996 年1 月,Java 1...

网友评论

      本文标题:在实践中学习java(1)--JAVA8的LocalDateTi

      本文链接:https://www.haomeiwen.com/subject/uosmbktx.html