【java】时间常用工具类

逃离我推掉我的手 2022-12-02 03:51 452阅读 0赞

最近写课表系统,涉及到很多时间的计算,总结了一些常用的计算时间的方法,方便以后的查看,有些方法估计

文章目录

    • 可能要导入的包
    • 根据日期获取当天是周几
    • 日期的偏移,在指定的日期跳到指定的周
    • 获取当前时间处在第几周的日期
    • 得到当前月份
    • 在指定时间后,通过周几来查询到指定的时间
    • 获取某段时间内的周一(二等等)的日期
    • 这是将时间转换后只保留年月日
    • 将字符串的时间转换为Date
    • 将时间转为时间戳
    • 获取当天的周数
    • 获取单独的 年 月 日
    • 获取当天的年月日
    • 获取提前几分钟的时间

可能要导入的包

hutool工具包,这个是一个很全的工具文档,值得推荐

  1. import cn.hutool.core.date.DateTime;
  2. import cn.hutool.core.date.DateUtil;
  3. import java.text.DateFormat;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.ArrayList;
  7. import java.util.Calendar;
  8. import java.util.Date;
  9. import java.util.List;

根据日期获取当天是周几

  1. /**
  2. * 根据日期获取当天是周几
  3. *
  4. * @param datetime 日期
  5. * @return 周几
  6. */
  7. public static int dateToWeek(String datetime) {
  8. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  9. Calendar cal = Calendar.getInstance();
  10. System.out.println(cal);
  11. Date date;
  12. try {
  13. date = sdf.parse(datetime);
  14. cal.setTime(date);
  15. } catch (ParseException e) {
  16. e.printStackTrace();
  17. }
  18. int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
  19. System.out.println("w为:" + w);
  20. return w;
  21. }

日期的偏移,在指定的日期跳到指定的周

  1. /**
  2. * 日期的偏移,在指定的日期跳到指定的周
  3. *
  4. * @param datetime
  5. * @param startWeek
  6. * @return
  7. */
  8. public static Date timeMove(String datetime, Integer startWeek) {
  9. Date date = DateUtil.parse(datetime);
  10. //常用偏移,结果:2017-03-04 22:33:23
  11. Date newDate2 = DateUtil.offsetDay(date, 7 * (startWeek - 1));
  12. return newDate2;
  13. }

获取当前时间处在第几周的日期

  1. /**
  2. * 获取当前时间处在第几周的日期
  3. * @param date 当前的时间,是从周一开始
  4. * @param startWeek 第几周
  5. * @return
  6. */
  7. public static List<String> dayListByWeek(Date date, Integer startWeek){
  8. List<String> dayList=new ArrayList<>();
  9. SimpleDateFormat sdf2= new SimpleDateFormat("dd");
  10. for (int i = 0; i <7 ; i++) {
  11. DateTime newDate2 = DateUtil.offsetDay(date, i);
  12. String day = sdf2.format(newDate2);
  13. dayList.add(day);
  14. }
  15. return dayList;
  16. }

得到当前月份

  1. /**
  2. * 得到当前月份
  3. * @param date
  4. * @return
  5. */
  6. public static String getMonth(Date date){
  7. SimpleDateFormat sdf= new SimpleDateFormat("MM");
  8. String month = sdf.format(date);
  9. return month;
  10. }

在指定时间后,通过周几来查询到指定的时间

  1. /**
  2. * 在指定时间后,通过周几来查询到指定的时间
  3. *
  4. * @param date
  5. * @param week
  6. * @return
  7. */
  8. public static Date dayMove(Date date, Integer week) {
  9. //常用偏移,结果:2017-03-04 22:33:23
  10. Date newDate2 = DateUtil.offsetDay(date, week - 1);
  11. return newDate2;
  12. }

获取某段时间内的周一(二等等)的日期

  1. /**
  2. * 获取某段时间内的周一(二等等)的日期
  3. * @param dataBegin 开始日期
  4. * @param dataEnd 结束日期
  5. * @param weekDays 获取周几,1-6代表周一到周六。0代表周日
  6. * @return 返回日期List
  7. */
  8. public static List<String> getDayOfWeekWithinDateInterval(String dataBegin, String dataEnd, int weekDays) {
  9. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  10. List<String> dateResult = new ArrayList<>();
  11. Calendar cal = Calendar.getInstance();
  12. String[] dateInterval = {
  13. dataBegin, dataEnd};
  14. Date[] dates = new Date[dateInterval.length];
  15. for (int i = 0; i < dateInterval.length; i++) {
  16. String[] ymd = dateInterval[i].split("[^\\d]+");
  17. cal.set(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1, Integer.parseInt(ymd[2]));
  18. dates[i] = cal.getTime();
  19. }
  20. for (Date date = dates[0]; date.compareTo(dates[1]) <= 0; ) {
  21. cal.setTime(date);
  22. if (cal.get(Calendar.DAY_OF_WEEK) - 1 == weekDays) {
  23. String format = sdf.format(date);
  24. dateResult.add(format);
  25. }
  26. cal.add(Calendar.DATE, 1);
  27. date = cal.getTime();
  28. }
  29. return dateResult;
  30. }

这是将时间转换后只保留年月日

  1. /**
  2. * 这是将时间转换后只保留年月日
  3. *
  4. * @param date
  5. * @return
  6. */
  7. public static String dateConversion(Date date) {
  8. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  9. String s = sdf.format(date); // 把带时分秒的 date 转为 yyyy-MM-dd 格式的字符串
  10. try {
  11. Date date2 = sdf.parse(s); // 把上面的字符串解析为日期类型
  12. String format = sdf.format(date2);
  13. System.out.println("这是转换后只保留年月日的时间" + format);
  14. return format;
  15. } catch (ParseException e) {
  16. e.printStackTrace();
  17. }
  18. return null;
  19. }

将字符串的时间转换为Date

  1. /**
  2. * 将字符串的时间转换为Date
  3. *
  4. * @param dateStr
  5. * @return
  6. */
  7. public static Date strToDate(String dateStr) {
  8. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  9. Date dateTime = null;
  10. try {
  11. dateTime = simpleDateFormat.parse(dateStr);
  12. } catch (ParseException e) {
  13. e.printStackTrace();
  14. }
  15. return dateTime;
  16. }

将时间转为时间戳

  1. /**
  2. * 将时间转为时间戳
  3. * @param date
  4. * @return
  5. */
  6. public static Long toUnixTime(Date date) {
  7. DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  8. String t = df.format(date);
  9. /**
  10. * 获取日期转换为Unix时间戳
  11. */
  12. long epoch = 0;
  13. try {
  14. epoch = df.parse(t).getTime();
  15. } catch (ParseException e) {
  16. e.printStackTrace();
  17. }
  18. return epoch;
  19. }
  20. /**
  21. * 将字符时间转换为Unix时间戳,毫秒
  22. * @param timeStr
  23. * @return
  24. */
  25. public static Long jointUnixTime(String timeStr) {
  26. Date date = strToDate(timeStr);
  27. Long aLong = toUnixTime(date);
  28. return aLong;
  29. }
  30. /**
  31. * 将字符时间转换为Unix时间戳,秒
  32. * @param timeStr
  33. * @return
  34. */
  35. public static Long jointUnixTimeSec(String timeStr) {
  36. Date date = strToDate(timeStr);
  37. long time = date.getTime()/1000;
  38. return time;
  39. }

获取当天的周数

  1. /**
  2. * 获取当天的周数
  3. * @param beginDateStr 开始的时间
  4. * @param endDateStr 结束的时间
  5. * @return
  6. */
  7. public static long getDaySub(String beginDateStr, String endDateStr) {
  8. long day = 0;
  9. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  10. java.util.Date beginDate;
  11. java.util.Date endDate;
  12. try {
  13. //先判断学期开始日期是星期几
  14. Calendar c = Calendar.getInstance();// 获得一个日历的实例
  15. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  16. c.setTime(sdf.parse(beginDateStr));
  17. int dayNum[] = {
  18. 6, 0, 1, 2, 3, 4, 5};//对应的星期几和星期一倒推相差几天
  19. //算出的星期几,和星期一差几天就把开始时间多倒推几天
  20. c.add(Calendar.DATE, -dayNum[c.get(Calendar.DAY_OF_WEEK) - 1]);
  21. beginDate = c.getTime();
  22. //beginDate = format.parse(beginDateStr);
  23. System.out.println(sdf.format(beginDate));
  24. endDate = format.parse(endDateStr);
  25. day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
  26. //System.out.println("相隔的天数="+day);
  27. } catch (ParseException e) {
  28. // TODO 自动生成 catch 块
  29. e.printStackTrace();
  30. }
  31. return day / 7 + 1;
  32. }

获取单独的 年 月 日

  1. /**
  2. *获取单独的 年 月 日
  3. * @param date 传过来的时间 例:2020-08-01
  4. * @return
  5. */
  6. public static String getYear(Date date){
  7. SimpleDateFormat sdf0 = new SimpleDateFormat("yyyy");
  8. SimpleDateFormat sdf1 = new SimpleDateFormat("MM");
  9. SimpleDateFormat sdf2= new SimpleDateFormat("dd");
  10. String str1 = sdf0.format(date);
  11. String str2 = sdf1.format(date);
  12. String str3 = sdf2.format(date);
  13. System.out.println("年份bai为:"+str1);
  14. System.out.println("月份为:"+str2);
  15. System.out.println("日为:"+str3);
  16. return "年"+str1+" "+"月"+" "+str2+"日"+str3;
  17. }

获取当天的年月日

  1. /**
  2. * 获取当天的年月日
  3. * @return
  4. */
  5. public static String getDay(){
  6. DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  7. String day = df.format(new Date());
  8. return day;
  9. }
  10. /**
  11. * 获取当天的星期一日期
  12. * @return
  13. */
  14. public static String getMondeyDate(){
  15. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  16. Calendar cal = Calendar.getInstance();
  17. cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
  18. int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
  19. if(dayWeek==1){
  20. dayWeek = 8;
  21. }
  22. cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
  23. Date mondayDate = cal.getTime();
  24. String weekBegin = sdf.format(mondayDate);
  25. return weekBegin;
  26. }

获取提前几分钟的时间

  1. /**
  2. * 获取提前几分钟的时间
  3. * @param time
  4. * @return
  5. */
  6. public static String beforeTime(String time){
  7. String dateStr=time;
  8. Date date = DateUtil.parse(dateStr);
  9. Calendar beforeTime = Calendar.getInstance();
  10. beforeTime.setTime(date);
  11. beforeTime.add(Calendar.MINUTE, -5);// 5分钟之前的时间
  12. Date beforeD = beforeTime.getTime();
  13. String before5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(beforeD);
  14. return before5;
  15. }

发表评论

表情:
评论列表 (有 0 条评论,452人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVA工具

    引言 说起工具类,大家都不会陌生。常用的工具类有Apache 的Commons、 Google 的Guava、以及处理时间日期的Joda扩展包。那么本文主要来讲这几个工具

    相关 Java工具

    异常处理 什么是异常? 有异于常态,和正常状态不一样,有错误出现,阻止当前方法或作用域等等都称之为异常。 有什么常见异常? ![70][] 处理异常