服务器之家

服务器之家 > 正文

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

时间:2020-07-11 14:01     来源/作者:liliangel

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

1.字符串转换为日期

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
   * 字符串转换为日期
   * @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.时间戳转日期

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
   * 时间戳转日期
   * @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.日期格式化成字符串

?
1
2
3
4
5
6
7
8
9
10
/**
   * 日期格式化成字符串
   * @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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
  * 获取指定日期之前或之后的日期
  * @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.获取指定日期之前或之后的日期 ,时分秒为当前的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * 获取指定日期之前或之后的日期
 * @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类型的时间字符串 转换成 时、分

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * 获取某个日期的时、分
 * @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类型的时间字符串 -->> 零点开始的秒数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * 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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
 * 零点开始的秒数转时间 -->> 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.比较两个日期相差的秒数

?
1
2
3
4
5
6
7
8
9
10
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);
}

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

?
1
2
3
4
5
6
7
8
9
10
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * 获取指定日期是星期几(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;
}

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

原文链接:http://www.cnblogs.com/liliangel/p/5292944.html

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
返回顶部