Java常用的时间操作

1. Date与String互换

1.1 Date转String

public static String Date2Str(Date date, String format) {
    // 自定义返回时间格式
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
    return simpleDateFormat.format(date);
}

1.2 String转Date

public static String Str2Date(String str) throws ParseException{
    // str对应的时间格式
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return simpleDateFormat.parse(str);
}

2. 日期Date常用操作

2.1 获取当前时间

public static Date getNow(){
    return new Date();
}

2.2 得到两个时间相隔的天数

public static Long getBetweenDay(Date date1, Date date2) {
    return (date2.getTime()-date1.getTime())/(1000*60*60*24);
}

2.3 获取年、月、日、时、分、秒

public static void getDateDetail(Date date) {
    Calendar c=Calendar.getInstance();  //创建Calendar对象
    c.setTime(date);
    int year=c.get(Calendar.YEAR);
    int month=c.get(Calendar.MONTH)+1;
    int day=c.get(Calendar.DAY_OF_MONTH);
    int hour=c.get(Calendar.HOUR_OF_DAY);
    int minute=c.get(Calendar.MINUTE);
    int second=c.get(Calendar.MINUTE);
    System.out.println("当前时间:"+year+"-"+month+"-"+day+"\t"+hour+":"+minute+":"+second);
}

2.4 判断两个时间是否在同一周

public static boolean isSameWeekDates(Date date1, Date date2) {
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal1.setTime(date1);
        cal2.setTime(date2);
        int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
        if (0 == subYear) {
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)){
                return true;
            }
        } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
            // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)){
                return true;
            }
        } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
            if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)){
                return true;
            }
        }
        return false;
    }

2.5 日期加一天

public static Date addCurrentDay(Date date){
        Calendar cal=Calendar.getInstance();  //获取当前日期 
        cal.setTime(date);  // Date转Calendar
        cal.add(Calendar.DAY_OF_YEAR, +1);
        return cal.getTime();  // Calendar转Date
    }

2.6 获取某一天最大时间和最小时间

  • 最大时间
// 例如:2020-09-08 23:59:59
public static Date getEndOfDay(Date date) {
		LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());;
		LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
		return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
	}
  • 最小时间
// 例如:2020-09-08 00:00:00
public static Date getEndOfDay(Date date) {
		LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());;
		LocalDateTime endOfDay = localDateTime.with(LocalTime.MIN);
		return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
	}

2.7 判断某个时间是否在条件的起始时间与结束时间之内

public static boolean belongCalendar(Date time, Date from, Date to) {
        Calendar date = Calendar.getInstance();
        date.setTime(time);
        Calendar after = Calendar.getInstance();
        after.setTime(from);
        Calendar before = Calendar.getInstance();
        before.setTime(to);
        if (date.after(after) && date.before(before)) {
            return true;
        } else {
            return false;
        }
    }

3. LocalDateTime使用

3.1 介绍

Java的Date,Calendar类型使用起来并不是很方便,而且Date类(据说)有着线程不安全等诸多弊端。同时若不进行封装,会在每次使用时特别麻烦。于是Java8推出了线程安全、简易、高可靠的时间包。并且数据库中也支持LocalDateTime类型,在数据存储时候使时间变得简单。Java8这次新推出的包括三个相关的时间类型:LocalDateTime年月日十分秒;LocalDate日期;LocalTime时间;三个包的方法都差不多。

3.2 Date转LocalDateTime

public static LocalDateTime DateToLocalDateTime(Date date) {
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = date.toInstant();
    return LocalDateTime.ofInstant(instant, zone);
}

3.3 LocalDateTime转Date

public static LocalTimeToDate(LocalDateTime localDateTime) {
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = localDateTime.atZone(zone).toInstant();
    return Date.from(instant);
}

3.4 返回指定格式当前日期

public static String getCurrentTime(String pattern) {
      LocalDateTime now = LocalDateTime.now();
      return now.format(DateTimeFormatter.ofPattern(pattern))        
}

3.5 String转Date

/**
  * @ param dateStr 待转换字符串
  * @ param format  格式化字符串
**/
public static Date Str2Date(String dateStr, String format) {
      // String -> LocalDateTime -> Date
      LocalDateTime localDateTime = LocalDateTime.parse(dateStr,  DateTimeFormatter.ofPattern(format));
      ZoneId zone = ZoneId.systemDefault();
      return Date.from(localDateTime.atZone(zone).toInstant());
}

3.6 Date转String

/**
  * @ param dateStr 待转换日期
  * @ param format  格式化字符串
**/
public static String Date2Str(Date date, String format){
    // Date -> LocalDateTime -> String
    DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(),zone);
    return df.format(localDateTime);
}

4. 参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值