java中日期处理的一些工具方法

简介: java中日期处理的一些工具方法


前言

现在是2022年4月16日15:35:14!忙里偷闲,直接来看方法吧,写完文章继续去改Bug:

1.计算两个日期之间相差的天数

/**
   * @param stratTime 开始时间
   * @param endTime 结束时间
   * @return 计算两个日期之间相差的天数
   */
  public static Map<String, Object> dateDiff(Long stratTime, Long endTime) {
    Map<String, Object> map = new HashMap<>();
    Long diff = endTime - stratTime;
    Long day = diff / (24 * 60 * 60 * 1000);
    Long hour = (diff / (60 * 60 * 1000) - day * 24);
    Long min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
    Long sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
    map.put("day", day);
    map.put("hour", hour);
    map.put("min", min);
    map.put("sec", sec);
    return map;
  }

2.将时间戳转换成时间

/**
   * 将时间戳转换成时间
   */
  public static Map<String, Object> formatTime(Long time) {
    Map<String, Object> map = new HashMap<>();
    Long day = time / (24 * 60 * 60 * 1000);
    Long hour = (time / (60 * 60 * 1000) - day * 24);
    Long min = ((time / (60 * 1000)) - day * 24 * 60 - hour * 60);
    Long sec = (time / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
    map.put("day", day);
    map.put("hour", hour);
    map.put("min", min);
    map.put("sec", sec);
    return map;
  }

3. 获取当前24小时的时间前后时间戳

/**
   * 将时间戳转换成时间
   */
    public static Map<String, Object> getTimeChuo() {
      Map<String, Object> map = new HashMap<>();
      Long nowTime = System.currentTimeMillis();
      Long startTime = nowTime - 24 * 60 * 60 * 1000;
      Long endTime = nowTime + 24 * 60 * 60 * 1000;
      map.put("startTime", startTime);
      map.put("endTime", endTime);
    return map;
  }

4.由出生日期获得年龄

public static int getAge(Date birthDay) throws Exception {
    Calendar cal = Calendar.getInstance();
    if (cal.before(birthDay)) {
      throw new IllegalArgumentException("出生日期小于当前时间,无效的日期!");
    }
    int yearNow = cal.get(Calendar.YEAR);
    int monthNow = cal.get(Calendar.MONTH);
    int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
    cal.setTime(birthDay);
    int yearBirth = cal.get(Calendar.YEAR);
    int monthBirth = cal.get(Calendar.MONTH);
    int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
    int age = yearNow - yearBirth;
    if (monthNow <= monthBirth) {
      if (monthNow == monthBirth) {
        if (dayOfMonthNow < dayOfMonthBirth) age--;
      } else {
        age--;
      }
    }
    return age;
  }

5.统计两个日期之间的所有日期

/**
   * 统计两个日期之间的所有日期
   */
  public static List<String> getBeginTimeAndEndTime(Date beginTime, Date endTime) {
    List<String> listDate = new ArrayList<>();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    try {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(beginTime);
      while (calendar.getTime().before(endTime) || calendar.getTime().equals(endTime)) {
        listDate.add(dateFormat.format(calendar.getTime()));
        calendar.add(Calendar.DAY_OF_MONTH, 1);
      }
      return listDate;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return listDate;
  }

6.根据生日获取年龄的另一种方法

/**
   * 根据日期获取年龄
   */
  public static int getAgeByDate(Date date) throws Exception {
    Calendar cal = Calendar.getInstance();
    int thisYear = cal.get(Calendar.YEAR);
    int thisMonth = cal.get(Calendar.MONTH);
    int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
    cal.setTime(date);
    int birthYear = cal.get(Calendar.YEAR);
    int birthMonth = cal.get(Calendar.MONTH);
    int birthdayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
    int age = thisYear - birthYear;
    // 未足月
    if (thisMonth <= birthMonth) {
      // 当月
      if (thisMonth == birthMonth) {
        // 未足日
        if (dayOfMonth < birthdayOfMonth) {
          age--;
        }
      } else {
        age--;
      }
    }
    return age;
  }


相关文章
|
2月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
251 18
|
2月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
193 1
|
2月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
205 4
|
2月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
431 4
|
2月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
313 5
|
3月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
1147 8
|
3月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
154 11
|
3月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
1026 1
|
3月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
安全 Java API
java 8 日期操作,真香
java 8 日期操作,真香
217 0