1. object TimeUtil {
  2.  
  3. var DEFAULT_FORMAT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss")
    var HOUR_FORMAT = DateTimeFormatter.ofPattern("yyyyMMddHH")
    var DAY_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd")
    var MONTH_FORMAT = DateTimeFormatter.ofPattern("yyyyMM")
    var YEAR_FORMAT = DateTimeFormatter.ofPattern("yyyy")
  4.  
  5. /**
    * 以List[String]形式返回两个日期之间的所有日期
    * 如 begin:20190903 end :20190906 返回[20190903,20190904,20190905,20190906]
    *
    * @param localStart
    * @param localEnd
    * @return
    */
    def findDatesBetween(localStart: LocalDateTime, localEnd: LocalDateTime): util.LinkedList[String] = {
    var localDateList = new util.LinkedList[String]()
    try {
    if (localStart.toLocalDate.equals(localEnd.toLocalDate)) {
    localDateList.add(DAY_FORMAT.format(localStart.toLocalDate))
    return localDateList
    }
    var length = ChronoUnit.DAYS.between(localStart.toLocalDate, localEnd.toLocalDate)
    while (length >= 0) {
    localDateList.add(DAY_FORMAT.format(localEnd.toLocalDate.minusDays(length)))
    length = length - 1
    }
    } catch {
    case ex => {
    println(ex.getStackTrace.mkString(","))
    }
    }
    return localDateList
    }
  6.  
  7. def findHoursBetween(localStart: LocalDateTime, localEnd: LocalDateTime): util.LinkedList[String] = {
    var localDateList = new util.LinkedList[String]();
    try {
    if (localStart.toString.equals(localEnd.toString)) {
    localDateList.add(HOUR_FORMAT.format(localStart))
    return localDateList
    }
    var local = localEnd
    var length = ChronoUnit.HOURS.between(localStart, localEnd)
    while (length >= 0) {
    localDateList.add(HOUR_FORMAT.format(local))
    local = local.minusHours(1)
    length = length - 1
    }
    } catch {
    case ex => {
    println(ex.getStackTrace.mkString(","))
    }
    }
    return localDateList
    }
  8.  
  9. /**
    * 计算粒度时间间天数
    *
    * @param time
    * @param granul
    * @return
    */
    def findDays(start: LocalDateTime, end: LocalDateTime): Long = {
    // jode Days.daysBetween
    return ChronoUnit.DAYS.between(start.toLocalDate, end.toLocalDate) + 1
    }
  10.  
  11. /**
    * 计算指定粒度的时间间隔的天数
    *
    * @param time
    * @param granul
    * @return
    */
    def calDays(time: String, granul: String): Long = {
    var end = findDayEnd(time, granul)
    var start = findDayStart(time, granul)
    if (end.isAfter(LocalDateTime.now)) {
    end = LocalDateTime.now
    }
    if (start.toLocalDate.equals(end.toLocalDate)) {
    return 1L
    }
    var res = findDays(start, end)
    if (res < 0) {
    return 1L
    }
    if (end.toLocalDate.equals(LocalDate.now())) {
    res = res - 1
    }
    res
    }
  12.  
  13. def findDayStart(time: String, granul: String): LocalDateTime = {
    if (Constants.WEEK.equalsIgnoreCase(granul)) {
    return getWeekStart(time)
    } else if (Constants.MONTH.equalsIgnoreCase(granul)) {
    return getMonthStart(time)
    } else if (Constants.SEASON.equalsIgnoreCase(granul)) {
    return getSeasonStart(time)
    } else if (Constants.YEAR.equalsIgnoreCase(granul)) {
    return getYearStart(time)
    } else if (Constants.HOUR.equals(granul)) {
    if (time.trim.length >= 11) {
    return LocalDateTime.parse(time.replaceAll("-", "").substring(0, 10) + "0000",
    new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss").toFormatter())
    }
    return LocalDateTime.parse(time.replaceAll("-", "").substring(0, 8) + "000000",
    new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss").toFormatter())
    } else {
    return LocalDateTime.parse(time.replaceAll("-|\\s", "") + "000000",
    new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss").toFormatter())
    }
    }
  14.  
  15. def findDayEnd(time: String, granul: String): LocalDateTime = {
    if (Constants.WEEK.equalsIgnoreCase(granul)) {
    return getWeekEnd(time)
    } else if (Constants.MONTH.equalsIgnoreCase(granul)) {
    return getMonthEnd(time)
    } else if (Constants.SEASON.equalsIgnoreCase(granul)) {
    return getSeasonEnd(time)
    } else if (Constants.YEAR.equalsIgnoreCase(granul)) {
    return getYearEnd(time)
    } else if (Constants.HOUR.equals(granul)) {
    if (time.trim.length >= 11) {
    return LocalDateTime.parse(time.replaceAll("-|\\s", "").substring(0, 10) + "5959",
    new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss").toFormatter())
    }
    return LocalDateTime.parse(time.replaceAll("-", "").substring(0, 8) + "235959",
    new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss").toFormatter())
    } else {
    return LocalDateTime.parse(time.replaceAll("-", "").substring(0, 8) + "235959",
    new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss").toFormatter())
    }
    }
  16.  
  17. /**
    *
    * @param time 2020 2020年第一天时间,即 2020-01-01
    * @return
    */
    def getYearStart(time: String): LocalDateTime = {
    val yearFirstDate = LocalDateTime.now
    .withYear(Integer.valueOf(time)).withMonth(1).withDayOfMonth(1)
    return getMin(yearFirstDate)
    }
  18.  
  19. /**
    *
    * @param time 2020 2020年最后一天时间,即 2020-12-31
    * @return
    */
    def getYearEnd(time: String): LocalDateTime = {
    var yearMonth = LocalDateTime.now
    .withYear(Integer.valueOf(time))
    .withMonth(12)
    var yearLastDateTime = getMax(yearMonthr.`with`(TemporalAdjusters.lastDayOfMonth()))
    return yearLastDateTime
    }
  20.  
  21. /**
    *
    * @param time 2020-02 2020年第二季度最后一天时间,即 2020-06-30 23:59:59
    * @return
    */
    def getSeasonEnd(time: String): LocalDateTime = {
    var r = LocalDateTime.now
    .withYear(Integer.valueOf(time.substring(0, time.lastIndexOf("-"))))
    .withMonth((Integer.valueOf(time.substring(time.lastIndexOf("-") + 1, time.length))) * 3)
    var seasonLastDateTime = getMax(r.r.`with`(TemporalAdjusters.lastDayOfMonth()))
    return seasonLastDateTime
    }
  22.  
  23. /**
    *
    * @param time 2020-02 2020年第二季度第一天时间,即 2020-04-01
    * @return
    */
    def getSeasonStart(time: String): LocalDateTime = {
    val seasonFirstDate = LocalDateTime.now
    .withYear(Integer.valueOf(time.substring(0, time.lastIndexOf("-"))))
    .withMonth((Integer.valueOf(time.substring(time.lastIndexOf("-") + 1)) - 1) * 3 + 1).withDayOfMonth(1)
    return getMin(seasonFirstDate)
  24.  
  25. }
  26.  
  27. /**
    *
    * @param time 2020-02 2020年2月第一天时间,即 2020-02-01
    * @return
    */
    def getMonthStart(time: String): LocalDateTime = {
    val now = LocalDateTime.now
    var r = now.withYear(Integer.valueOf(time.substring(0, time.lastIndexOf("-"))))
    .withMonth(Integer.valueOf(time.substring(time.lastIndexOf("-") + 1, time.length)))
    return getMin(r.withDayOfMonth(1))
    }
  28.  
  29. /**
    *
    * @param time 2020-02 2020年2月最后一天时间,即 2020-02-29
    * @return
    */
    def getMonthEnd(time: String): LocalDateTime = {
    val now = LocalDateTime.now
    var r = now.withYear(Integer.valueOf(time.substring(0, time.lastIndexOf("-"))))
    .withMonth(Integer.valueOf(time.substring(time.lastIndexOf("-") + 1, time.length)))
    var monthLastDateTime = getMax(rr.`with`(TemporalAdjusters.lastDayOfMonth()))
    return monthLastDateTime
    }
  30.  
  31. /**
    *
    * @param time 2020-03 2020年第三周开始时间,
    * @return
    */
    def getWeekStart(time: String): LocalDateTime = {
    return getMin(LocalDate.parse(time,
    new DateTimeFormatterBuilder().appendPattern("YYYY-w").parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter()).atStartOfDay())
    }
  32.  
  33. /**
    *
    * @param time 2020-03 2020年第三周最后一天日期,如果当前时间在第三周内,end时间则为当前时间
    * @return
    */
    def getWeekEnd(time: String): LocalDateTime = {
    var lastDateTime = getMax(LocalDate.parse(time,
    new DateTimeFormatterBuilder().appendPattern("YYYY-w").parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter()).atStartOfDay() .`with`(TemporalAdjusters.
    next(DayOfWeek.SUNDAY)))
    return lastDateTime }
  34.  
  35. def parse(tt: String): LocalDateTime = {
    if (StringUtils.isBlank(tt)) {
    throw new NullPointerException() }
  36.  
  37. var t = tt.replaceAll("-|\\s", "")
    var pattern = "yyyyMMddHHmmss"
    if (t.length == 10) { pattern =
    "yyyyMMddHH"
    }
    return LocalDateTime.parse(t,
    new DateTimeFormatterBuilder().appendPattern(pattern).toFormatter()) }
  38.  
  39. def getMin(tt: LocalDateTime): LocalDateTime = {
    return tt.withHour(0).withMinute(0).withSecond(0) }
  40.  
  41. def getMax(tt: LocalDateTime): LocalDateTime = {
    return tt.withHour(23).withMinute(59).withSecond(59) }

java1.8时间处理的更多相关文章

  1. atitit.获取北京时间CST 功能api总结 O7

    atitit.获取北京时间CST 功能api总结 O7 1. 获取cst时间(北京时间)两布:1.抓取url timtstamp >>format 到cst 1 2. 设置本机时间  se ...

  2. Java1.5泛型指南中文版(Java1.5 Generic Tutorial)

    Java1.5泛型指南中文版(Java1.5 Generic Tutorial) 英文版pdf下载链接:http://java.sun.com/j2se/1.5/pdf/generics-tutori ...

  3. java1.8--Null Object模式

    整理这篇博客是因为现在在整理java8中的optional,所以觉得很有必要整理下Null Object模式.java.lang.NullPointerException,只要敢自称Java程序员,那 ...

  4. java1.8--1.8入门介绍

    在我之前的工作中,一直使用的是java6.所以即使现在java已经到了1.8,对于1.7增加的新特性我也基本没使用的.在整理一系列1.8的新特性的过程中,我也会添加上1.7增加的特性. 下面的整理可能 ...

  5. 【Linux】【Java】CentOS7安装最新版Java1.8.191运行开发环境

    1.前言 本来在写[Linux][Apatch Tomcat]安装与运行.都快写完了. 结果...我忘记安装 Java 环境 然后...新开了博客编辑页面. 最后...我的那个没了...没了...真的 ...

  6. java1.8新特性(三 关于 ::的用法)

    java1.8 推出了一种::的语法 用法 身边 基本没人用1.8的新API 目前 我也是只处于学习 运用 阶段 有点 知其然不知其所以然 通过后面的学习,及时查漏补缺 一个类中 有 静态方法 ,非静 ...

  7. java1.8操作日期

    java1.8获取年份: int year = Calendar.getInstance().get(Calendar.YEAR); StringBuilder code = new StringBu ...

  8. Java 8 日期时间API使用介绍

    如何正确处理时间 现实生活的世界里,时间是不断向前的,如果向前追溯时间的起点,可能是宇宙出生时,又或是是宇宙出现之前, 但肯定是我们目前无法找到的,我们不知道现在距离时间原点的精确距离.所以我们要表示 ...

  9. Java学习关于时间操作的应用类--Date类、Calendar类及其子类

    Date类 Date类封装了当期时间和日期.与Java1.0定义的原始版的Date类相比,Date类发生了本质的变化.在Java1.1发布时,原始版Date类定义的许多功能被移进Calendar类和D ...

随机推荐

  1. 【python】numpy库和matplotlib库学习笔记

    Numpy库 numpy:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成,并可与C++/Fortran语言无缝结合.树莓派Python v3默 ...

  2. P1620 漂亮字串

    \(核心思路就是分情况讨论\) 从整体上对题目进行分析,此题共有三种情况: (1)0 有一方为0,则结果为另一方的max: 两方都为0,则结果为0: (2)一方多,另一方不够用,满足\((contx+ ...

  3. IDEA中如何使用debug调试项目 一步一步详细教程

    转载该文章:https://blog.csdn.net/yxl_1207/article/details/80973622 一.Debug开篇 首先看下IDEA中Debug模式下的界面. 如下是在ID ...

  4. 【T-SQL】基础——操作

    --删除表 如果已经存在USE master--检查是否已经存在一个表,如果有就删除IF(EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TA ...

  5. 数据结构学习:二叉查找树的概念和C语言实现

    什么是二叉查找树? 二叉查找树又叫二叉排序树,缩写为BST,全称Binary Sort Tree或者Binary Search Tree. 以下定义来自百度百科: 二叉排序树或者是一棵空树,或者是具有 ...

  6. Offset等一些类似属性的使用

    1.offset系列 // offset 系列 var father = document.querySelector('.father'); var son = document.querySele ...

  7. Qt5.5 connection firebird on Linux Centos7.2 or windows

    windows c++ 项目移植到 linux,原项目需要连接 Firebird数据库. google 后知道 linux qt connection Firebird 有两种方法: 1.ibpp c ...

  8. spark优化总结

    1.Spark调优背景 目前Zeppelin已经上线一段时间,Spark作为底层SQL执行引擎,需要进行整体性能调优,来提高SQL查询效率.本文主要给出调优的结论,因为涉及参数很多,故没有很细粒度调优 ...

  9. 曾开源OpenStack,如今Rackspace再次启动IPO

    导读:Rackspace开源的OpenStack已成为全球仅次于Linux的第二大开源社区,但Rackspace至今仍在苦苦探索路在何方. 近期有国外媒体爆料,美国云计算厂商Rackspace又悄悄准 ...

  10. LeetCode 31. 下一个排列 | Python

    31. 下一个排列 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改, ...