Java:DateUtils 获取 本上下(周/月)周一周日 最后一天 当月多少天

20 篇文章 0 订阅
12 篇文章 2 订阅

前言

使用日期函数,获取当月多少天,当前第几月,以及各种与时间有关系的操作;
这篇文章草稿是在19-5-30写好的,一直想完善,写个一网打尽的,奈何自己懒,一直没写完,时隔一年,写完吧,基本上可以处理时间的基本转换操作
公共抽象类CalendarAPI
参考文章一
参考文章二

字符串互转时间

     Date d=new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //时间转字符串 2020-07-17 11:30:49
        String ds=df.format(d);
        System.out.println(ds);
        try {
            //字符串转时间 Fri Jul 17 11:26:22 CST 2020
            Date sd=df.parse("2020-07-17 11:26:22");
            System.out.println(sd);
        } catch (ParseException e) {
            e.printStackTrace();
        }

毫秒值转时间

   Calendar calendar2 = Calendar.getInstance();
   calendar2.setTimeInMillis(1571952368000L);
   DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
   String format = df.format(calendar2.getTime());
   System.out.println(format);
   //2019-10-25

工具类

获取当月多少天 本(周/月)上(周/月)下(周/月)周一周日 本月第一天,最后一天

package com.picc.utils;
  
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author ZhangLe
 * @Date 2020/9/27 15:21
 */
public class DateUtil {

    private static  final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static  final DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
    private static  final Calendar calendar =Calendar.getInstance();
    
    /**
     * 返回当前时间
     * @return
     */
    public static String getTime() {
        Date date = new Date();
        String format =  df.format(date);
        return format;
    }
    /**
     * 获取两个时间差值 几天几时几分几秒
     * @param startTime
     * @param endTime
     * @return
     */
    public static String dateDifference(String startTime ,String endTime){
        String str="";
        try {
            Date start = df.parse(startTime);
            Date end = df.parse(endTime);
            //除以1000是为了转换成秒
            long between=(end.getTime()-start.getTime())/1000;
            long day=between/(24*3600);
            long hour=between%(24*3600)/3600;
            long minute=between%3600/60;
            long second=between%60;
            System.out.println(between%60);
            str=day+"天"+hour+"小时"+minute+"分"+second+"秒";
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return str;
    }

    /**
     * 返回当前时间之前N周 本周 之后N周 的周一周日准确时间
     * @param date 当前时间
     * @param week 获取上几周就传负数几 下几周就正数+1  举例上周 传 -1 本周传 0 下周传 1
     * @return
     */
    public static Map<String,String> reMonSun(String date,int week){
        Map<String,String> map = new HashMap();

        try {
            calendar.setTime(df2.parse(date));
            //设置一周第一天是星期一  国外的一周第一天是星期天 默认是按照国外算得
            calendar.setFirstDayOfWeek(Calendar.MONDAY);

            calendar.add(Calendar.WEEK_OF_MONTH, week);

            //查询当前星期几 在本周中 从周日开始算 星期天就是 1 星期一就是2 以此类推
            int nowTime =calendar.get(Calendar.DAY_OF_WEEK);
            //是1的时候就是星期天 给他赋值8 可以在下边得出负数 用于消减时间 其他状况不做处理
            if(nowTime==1){
                nowTime= 8;
            }
            calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - nowTime);
            Date monday = calendar.getTime();
            String weekBegin = df.format(monday);
            // 此时日期已经是星期一 给当前日期加上6天必然是周末
            calendar.add(Calendar.DATE, 6);
            Date sundayDate = calendar.getTime();
            String weekEnd = df.format(sundayDate);
            map.put("mondayDate", weekBegin);
            map.put("sundayDate", weekEnd);
            return map;
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

    /**
     * 返回当前时间之前N月 本月 之后N月第一天和最后一天
     * @param date   当前时间
     * @param month  获取上几月就传负数几 下几月就正数+1  举例上月 传 -1 本月传 0 下月传 1
     * @return
     */
   public static Map<String,String>  reOneLast(String date,int month){

       Map<String,String> map = new HashMap();
       try {
           calendar.setTime(df2.parse(date));
           //当前月的上个月
            calendar.add(Calendar.MONTH, month);
           //设置当前月的最大天数
           calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
           Date lastDateOfMonth = calendar.getTime();
           String lastDay = df.format(lastDateOfMonth);
           //设置一 即为每月第一天
           calendar.set(Calendar.DATE,1);
           Date oneDayofMonth = calendar.getTime();
           String oneDay = df.format(oneDayofMonth);
           map.put("oneDay", oneDay);
           map.put("lastDay", lastDay);
       }catch (Exception e){
           throw new RuntimeException(e);
       }

       return map;
   }
    /**
     * 返回当月最大天数
     * @param date 当前时间
     * @return
     */
   public static int reMonthMaxDay(String date){
       try {
           calendar.setTime(df2.parse(date));
       } catch (ParseException e) {
           e.printStackTrace();
       }
       int actualMaximum = calendar.getActualMaximum(Calendar.DATE);
       return actualMaximum;
   }
    public static void main(String[] args) {
         String date="2020-11-05";
        

    }
}

获取当月多少天

输入日期获取当月多少天

        String date="2019-05";
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
        Calendar calendar =Calendar.getInstance();
        try {
            calendar.setTime(dateFormat.parse(date));
        }catch (Exception e){
            throw new RuntimeException(e);
        }
        
        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
        calendar.set(Calendar.DATE, 1);
        calendar.roll(Calendar.DATE,-1);
        int time1 =calendar.get(Calendar.DATE);
        System.out.println(time1);

工具类做法

    /**
     * 返回当月最大天数
     * @param date 当前时间
     * @return
     */
   public static int reMonthMaxDay(String date){
       try {
           calendar.setTime(df2.parse(date));
       } catch (ParseException e) {
           e.printStackTrace();
       }
       int actualMaximum = calendar.getActualMaximum(Calendar.DATE);
       return actualMaximum;
   }

两个日期比较大小

     String old="2020-07-12 19:30:48.0";
        String now="2020-07-17 11:30:48.0";
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date sd1=df.parse(old);
            Date sd2=df.parse(now);
            //sd1时间在sd2时间之前
            System.out.println(sd1.before(sd2));
             //sd1时间在sd2时间之后 返回布尔值
            System.out.println(sd1.after(sd2));
        } catch (ParseException e) {
            e.printStackTrace();
        }

获取某天的N天/月/年前

Calendar的方法很多,星期,小时,。。根据需求调用方法即可

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();//获取当前时间
        Calendar calendar = Calendar.getInstance();

        calendar.setTime(date);
        calendar.add(Calendar.DATE, -15);//当前时间减去15天,即15天前的时间
        String format = dateFormat.format(calendar.getTime());
        System.out.println(format);
        System.out.println(calendar.getTime());
        calendar.add(Calendar.YEAR, -1);//当前时间减去一年,即一年前的时间
        String format2 = dateFormat.format(calendar.getTime());
        System.out.println(format2);
        System.out.println(calendar.getTime());
        calendar.add(Calendar.MONTH, -1);//当前时间前去一个月,即一个月前的时间
        String format3 = dateFormat.format(calendar.getTime());
        System.out.println(format3);
        System.out.println(calendar.getTime());
        calendar.add(Calendar.MONTH, 1);//当前时间加一个月,即一个月后的时间
        String format4 = dateFormat.format(calendar.getTime());
        System.out.println(format4);
        System.out.println(calendar.getTime());

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值