Java日期的相关操作

318 阅读2分钟

记录一下常用的日期方法

  1. 获取某个时间的方法 这里提供一段方法供大家参考
private static Date getFormatDate(String updated) throws Exception{
        String partOfDate = updated.substring(3);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        if (updated.substring(0, 2).equals("今天")) {
            calendar.set(Calendar.HOUR_OF_DAY, 0);
        } else if (updated.substring(0, 2).equals("昨天")) {
            calendar.set(Calendar.HOUR_OF_DAY, -1);
        } else if (updated.substring(0, 2).equals("明天")) {
            calendar.add(Calendar.DATE, 1);
        }
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        SimpleDateFormat todaySdf = new SimpleDateFormat("yyyy-MM-dd");
        String today = todaySdf.format(calendar.getTime());
        String finalString = today + " " + partOfDate;
        SimpleDateFormat finalSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return finalSdf.parse(finalString);
    }
    
public static void main(String[] args) {
       Date nineFifteenDate = getFormatDate("今天 9:15:00");
       Date tomorrowDate = getFormatDate("明天 09:15:00");
}

返回的结果就是:

  • Wed Jan 27 09:15:00 IRKT 2021
  • Wed Jan 28 09:15:00 IRKT 2021

这里补充一个知识点:add和set的却别

  • set 表示直接设值 不考虑原来的时间值
  • add 表示在原有的基础上进行加减value
  • calendar.add(Calendar.DAY_OF_MONTH, 2);//表示在默认的当前日期上加两天
  • calendar.set(Calendar.DAY_OF_MONTH,2);//表示直接将日期设置为本月2号
  1. 日期比较之间的比较 常用的两种方法:
  • Date:before/after判断
      Date threeFifteenDate = getFormatDate("今天 15:15");
      Date tomorrowDate = getFormatDate("明天 09:15:00");
      if (threeFifteenDate.before(tomorrowDate)) {
            true;
      }
      if (threeFifteenDate.after(tomorrowDate)) {
            false;
      }

before:在日期之前。 after:在日期之后。

  • String:compareTo判断 需要将日期转换String格式。
SimpleDateFormat finalSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String beginTime = finalSdf.format(new Date());
if (beginTime.compareTo(endTime) > 0) {}

返回正值是代表左侧日期大于参数日期,反之亦然,相同为0。日期格式必须一致

  1. 日期之间的计算(相差年、月、日、时、分、秒) 方法很多种,这里提供一种供大家参考。
public static String calculateDateTime(Date beginTime, Date endTime) {
      long begin = beginTime.getTime();
      long end = endTime.getTime();
      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;
      System.out.println("beginTime 与 endTime 相差 " + day + "天" + hour + "小时" + min + "分" + sec + "秒");
}

计算两个时间相差多少秒:

long second = beginTime.getTime() - endTime.getTime() / 1000;
  1. 获取当前的时间戳 提供4种获取方式:
long timeStamp1 = System.currentTimeMillis();
Date date = new Date();
long timeStamp2 = date.getTime();
Calendar calendar = Calendar.getInstance();
long timeStamp3 = calendar.getTimeInMillis();
Clock clock = Clock.systemUTC();
long timeStamp4 = clock.millis();
  1. 记录程序运行耗时
long beginTime = System.currentTimeMillis();
long endTime = System.currentTimeMillis();
Calendar c = Calendar.getInstance();
c.setTimeInMillis(endTime - startTime);
logger.info("耗时: " + c.get(Calendar.MINUTE) + "分 " +
        c.get(Calendar.SECOND) + "秒 ");

到此先记录这些方式,感谢各位观看。有不对的地方或者有更好的方法还请大佬们指教。后期在用到日期相关的方法再记录。