详解JAVA常用的时间操作【实用】

 更新时间:2016年12月09日 10:24:07   作者:liliangel  
本文主要介绍了JAVA一些常用的时间操作,很实用,相信大家在开发项目时会用到,下面就跟小编一起来看下吧

项目中经常有对时间进行处理的需求,下面是一些常用的操作整理,方便以后再次使用以及做相关复习。

1.字符串转换为日期

/**
   * 字符串转换为日期
   * @param dateStr 需要转换的日期
   * @param dateFormat 日期格式yyyy-MM-dd/yyyy-MM-dd HH:mm:ss
   */
  public static Date toDate(String dateStr, SimpleDateFormat dateFormat) throws ParseException{
    Date date = null;
    try {
      date = dateFormat.parse(dateStr);
    } catch (ParseException e) {
      logger.debug("Fail to convert String to Date, {}", dateStr);
    }
    return date;
  }

2.时间戳转日期

/**
   * 时间戳转日期
   * @param date
   * @return
   */
  public static String dateToTime(long time, SimpleDateFormat dateFormat) throws ParseException{
     String data = null;
     try {
       dateFormat.format(new Date(time*1000));  
     } catch (Exception e) {
       logger.debug("Fail to convert long to Date, {}", time);
     }
     return data;
  }

3.日期格式化成字符串

/**
   * 日期格式化成字符串
   * @param date
   * @param dateFormat
   * @return
   * @throws ParseException
   */
  public static String toString(Date date, SimpleDateFormat dateFormat) throws ParseException{
    return dateFormat.format(date);
  }

4.获取指定日期之前或之后的日期 ,十分秒为00:00:00

 /**
   * 获取指定日期之前或之后的日期
   * @param date 
   * @param num 正数为之后,负数为之前
   * @return yyyy-MM-dd 00:00:00
   */
  public static Date getSpecificDate(Date date, int num){
    Calendar todayCal = Calendar.getInstance();
    todayCal.setTime(date);
    Calendar c = Calendar.getInstance();
    c.set(todayCal.get(Calendar.YEAR), todayCal.get(Calendar.MONTH), todayCal.get(Calendar.DAY_OF_MONTH) + num, 0, 0, 0);
    return c.getTime();
  }

5.获取指定日期之前或之后的日期 ,时分秒为当前的

  /**
   * 获取指定日期之前或之后的日期
   * @param date 
   * @param num 正数为之前,负数为之后
   * @return yyyy-MM-dd + 当前的时分秒
   */
  public static Date getSpecificDateAndHhMmSs(Date date,int num){
    Calendar c = Calendar.getInstance(); 
    c.setTime(date); 
    int day=c.get(Calendar.DATE); 
    c.set(Calendar.DATE,day - num); 
    return c.getTime(); 
  }

6.将time类型的时间字符串 转换成 时、分

  /**
   * 将time类型的时间字符串 转换成 时、分
   * HH-mm-ss -->> HH-mm
   * @param time 
   * @return
   */
  public static String timeToHHMM(String time){
    return time.substring(0, time.length() - 3);
  }

7.获取某个日期的时、分

  /**
   * 获取某个日期的时、分
   * @param date
   * @return HH-mm
   */
  public static String getHM(Date date){
    Calendar ca = Calendar.getInstance(); 
    ca.setTime(date);
    Integer hour = ca.get(Calendar.HOUR_OF_DAY);//小时 
    Integer minute = ca.get(Calendar.MINUTE);//分
    String rs_hour = hour.toString();
    String rs_minute = minute.toString();
    if (rs_hour.length() == 1){
      rs_hour = "0" + hour;
    }
    if(rs_minute.length() == 1){
      rs_minute = "0" + minute;
    }
    return rs_hour + ":" + rs_minute;
  }

8.time类型的时间字符串 -->> 零点开始的秒数

  /**
   * time类型的时间字符串 -->> 零点开始的秒数
   * @param time HH-mm / HH-mm-ss
   * @return
   */
  public static Integer timeToSeconds(String time){
     String[] timeSplit = null;
     int hours = 0,minutes = 0,seconds = 0;
     try {
       timeSplit = time.split(":");
       if (timeSplit.length == 2) {
         hours = Integer.valueOf(timeSplit[0])*60*60;
         minutes = Integer.valueOf(timeSplit[1])*60;
       }else if(timeSplit.length == 3){
         hours = Integer.valueOf(timeSplit[0])*60*60;
         minutes = Integer.valueOf(timeSplit[1])*60;
         seconds = Integer.valueOf(timeSplit[2]);
       }else{
         logger.debug("Fail to convert the time, {}", time);
       }
     } catch (Exception e) {
       logger.debug("Fail to convert the time, {}", time);
       throw e;
     }
    return hours + minutes + seconds;
  }

9.零点开始的秒数转时间 -->> HH-mm-ss

  /**
   * 零点开始的秒数转时间 -->> HH-mm-ss
   * @param durationSeconds
   * @return
   */
  public static String getDuration(int durationSeconds){ 
    int hours = durationSeconds /(60*60); 
    int leftSeconds = durationSeconds % (60*60); 
    int minutes = leftSeconds / 60; 
    int seconds = leftSeconds % 60; 
    StringBuffer sBuffer = new StringBuffer(); 
    sBuffer.append(addZeroPrefix(hours)); 
    sBuffer.append(":"); 
    sBuffer.append(addZeroPrefix(minutes)); 
    sBuffer.append(":"); 
    sBuffer.append(addZeroPrefix(seconds)); 
    return sBuffer.toString(); 
  } 
  public static String addZeroPrefix(int number){ 
    if(number < 10) 
      return "0"+number; 
    else 
      return ""+number; 
  }

10.比较两个日期相差的秒数

  /**
   * 比较两个日期相差的秒数
   * @param startDate
   * @param endDate
   * @return
   */
  public static int getTimeSeconds(Date startDate,Date endDate) {
     long a = endDate.getTime();
     long b = startDate.getTime();
     return (int)((a - b) / 1000);
  }

11.判断两个时间段是否存在交集

  /**
   * 比较两个日期相差的秒数
   * @param startDate
   * @param endDate
   * @return
   */
  public static int getTimeSeconds(Date startDate,Date endDate) {
     long a = endDate.getTime();
     long b = startDate.getTime();
     return (int)((a - b) / 1000);
  }

12.获取指定日期是星期几(1-7分别代表周一至周日)

  /**
   * 获取指定日期是星期几(1-7分别代表周一至周日)
   * @return
   */
  public static int DayOfWeek(Date date){
    Calendar now = Calendar.getInstance();
    now.setTime(date);
    boolean isFirstDay = (now.getFirstDayOfWeek() == Calendar.SUNDAY);
    int weekday = now.get(Calendar.DAY_OF_WEEK);
    if(isFirstDay){
      weekday = weekday - 1;
      if(weekday == 0){
        weekday = 7;
      }
    }
    return weekday;
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • Java实现监控多个线程状态的简单实例

    Java实现监控多个线程状态的简单实例

    下面小编就为大家带来一篇Java实现监控多个线程状态的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • mybatis中foreach嵌套if标签方式

    mybatis中foreach嵌套if标签方式

    这篇文章主要介绍了mybatis中foreach嵌套if标签方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • JAVA代码开发规范

    JAVA代码开发规范

    本文主要对JAVA代码开发规范进行详细介绍,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • javaweb分页原理详解

    javaweb分页原理详解

    这篇文章主要为大家详细介绍了javaweb分页的原理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java实现LeetCode(报数)

    Java实现LeetCode(报数)

    这篇文章主要介绍了Java实现LeetCode(报数),本文通过使用java实现leetcode的报数题目和实现思路分析,需要的朋友可以参考下
    2021-06-06
  • Spring Boot 2和Redis例子实现过程解析

    Spring Boot 2和Redis例子实现过程解析

    这篇文章主要介绍了Spring Boot2发布与调用REST服务过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Nacos源码阅读方法

    Nacos源码阅读方法

    这篇文章将会带大家阅读Nacos源码以及教大家阅读源码的技巧,感兴趣的朋友跟随小编一起看看Nacos源码阅读方法
    2022-03-03
  • 使用Sentinel自定义返回和实现区分来源方式

    使用Sentinel自定义返回和实现区分来源方式

    这篇文章主要介绍了使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java中初始化List集合的八种方式汇总

    Java中初始化List集合的八种方式汇总

    List 是 Java 开发中经常会使用的集合,下面这篇文章主要给大家介绍了关于Java中初始化List集合的八种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java NIO中四大核心组件的使用详解

    Java NIO中四大核心组件的使用详解

    Java NIO(New IO)是Java 1.4版本中引入的一套全新的IO处理机制,而NIO提供了四个核心组件:Channel、Buffer、Selector和SelectionKey,本文就来简单讲讲这四大组件的使用吧
    2023-05-05

最新评论