• 工具类:日期处理转换


         日常工作中,我们会经常用做日期的格式化、日期与字符串之间的转换、日期之间的计算等。为了聚焦项目本身而不要过分关注其他细枝末节,本人写了一个开发中可能会用到的日期工具类。这个工具类里主要包含有“将日期字符串转换为Date日期”、“将Date日期转换为字符串形式”、“获取日期区间段内的每日日期”、“两个日期的时间戳之差”等这几个方法。

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;
    
    public class DateTimeUtils
    {
        
        /**
         * 将日期字符串转换为日期对象
         * 
         * @param dateStr 日期字符串,如“2018-10-08”
         * @param dateFormate 日期格式化字符串,如“yyyy-MM-dd"
         * @return 日期对象
         * @see [类、类#方法、类#成员]
         * @Description: TODO
         */
        public static Date parseDate(String dateText, String dateFormate)
        {
            if(dateText==null|| dateText.trim().isEmpty())
                return null;
            
            SimpleDateFormat sdf = new SimpleDateFormat(dateFormate);
            Date date = null;
            try
            {
                date = sdf.parse(dateText);
            }
            catch (ParseException e)
            {
              e.printStackTrace();
            }
            return date;
        }
        
        /**
         * 获得某日期区间的每日日期集合
         * 
         * @param startDate 起始日期
         * @param endDate 结束日期
         * @return 日期集合
         * @see [类、类#方法、类#成员]
         */
        public static List<Date> getDatePeriodList(Date startDate, Date endDate)
        {
            List<Date> listDate = new ArrayList<Date>();
            // 将起始日期加入日期列表
            listDate.add(startDate);
            // 循环中会用到起止日期之间的日历对象
            Calendar calCurrentDate = Calendar.getInstance();
            // 将其初始值设置为起始日期
            calCurrentDate.setTime(startDate);
            while (endDate.after(calCurrentDate.getTime()))
            {
                // 每次循环中,日历对象calCurrentDate向推进1天,并将其转换后的Date对象添加到listDate列表中
                calCurrentDate.add(Calendar.DAY_OF_MONTH, 1);
                listDate.add(calCurrentDate.getTime());
            }
            return listDate;
        }
        
        /**
         * 获得某日期区间的字符串型每日日期集合
         * <br>
         * 如2018-10-01、2018-10-02、...2018-10-21
         * 
         * @param startDate 起始日期
         * @param endDate 结束日期
         * @param dateFormat 日期格式化字符串,如“yyyy-MM-dd"
         * @return 字符串型日期集合
         * @see [类、类#方法、类#成员]
         * @Description: TODO
         */
        public static List<String> datePeriodText(Date startDate, Date endDate, String dateFormat)
        {
            
            List<String> dateStrs = new ArrayList<>();
            // 将起始日期加入日期列表
            String startDateStr = dateToTextFormat(startDate, dateFormat);
            dateStrs.add(startDateStr);
            // 循环中会用到起止日期之间的日历对象
            Calendar calCurrentDate = Calendar.getInstance();
            // 将其初始值设置为起始日期
            calCurrentDate.setTime(startDate);
            while (endDate.after(calCurrentDate.getTime()))
            {
                // 每次循环中,日历对象calCurrentDate向推进1天,并将其转换后的Date对象添加到listDate列表中
                calCurrentDate.add(Calendar.DAY_OF_MONTH, 1);
                String curDateStr = dateToTextFormat(calCurrentDate.getTime(), dateFormat);
                dateStrs.add(curDateStr);
            }
            return dateStrs;
            
        }
        
        /**
         * 将日期对象转换为字符串形式
         * 
         * @param date 日期
         * @param dateFormate  日期格式化字符串,如“yyyy-MM-dd"
         * @return 字符串格式的日期
         * @see [类、类#方法、类#成员]
         * @Description: TODO
         */
        public static String dateToTextFormat(Date date, String dateFormat)
        {
            
            return new SimpleDateFormat(dateFormat).format(date);
        }
        
        /**
         * 比较两个字符串格式的日期dateA 、dateB的先后时间顺序
         * <p>
         * 返回值为1表示dateA时间在dateB之后, 返回值为-1表示dateA时间在dateB之前, 返回值为0表示dateA、dateB时间相同,
         * 
         * @param dateA 日期1,如"08:10"
         * @param dateB 日期2,如"08:21"
         * @param dateFormate 日期格式化字符串 ,如"hh:mm"(12小时制)、“HH:mm"(24小时制)
         * @return 有-1,0,1这三个返回值
         * @see [类、类#方法、类#成员]
         * @Description: TODO
         */
        public static int compareTo(String dateA, String dateB, String dateFormate)
        {
            Date date1 = parseDate(dateA, dateFormate);
            Date date2 = parseDate(dateB, dateFormate);
            // date1在date2之后
            if (date1.getTime() > date2.getTime())
            {
                return 1;
            }
            // date1 在date2之前
            else if (date1.getTime() < date2.getTime())
            {
                return -1;
            }
            // date1 、date2时间相同
            else
            {
                return 0;
            }
        }
        
        /** 
         * 计算两个字符串格式的日期dateA 、dateB的时间戳之差
         * 
         * @param dateA  日期A,如"08:10" 、"2018-03-10 12:12"
         * @param dateB  日期B,如"08:21"、 "2018-03-15 14:12"
         * @param dateFormate  日期格式化字符串 ,如"hh:mm"(12小时制)、“HH:mm"(24小时制) 、 "yyyy-MM-dd HH:mm"
         * @return 两日期之差的毫秒数
         * @see [类、类#方法、类#成员]
         */
        public static long diff(String dateA,String dateB,String dateFormate){
            Date date1 = parseDate(dateA, dateFormate);
            Date date2 = parseDate(dateB, dateFormate);
          
            return date1.getTime()-date2.getTime();
        }
        
        /** 
         * 计算两个日期相差的小时数
         * @param newDate
         * @param oldDate
         * @return
         * @see [类、类#方法、类#成员]
         */
        public  static long calcTimeDiffOnHour(Date newDate ,Date oldDate){
            if(newDate==null || oldDate ==null){
                throw new IllegalArgumentException("参数 newDate 、oldDate不能为空");
            }
           
           long diffMillis= newDate.getTime()-oldDate.getTime();
           return diffMillis/(1000*60*60);
        }
        
        
        
        public static void main(String[] args)
        {
            long t=calcTimeDiffOnHour(new Date(),new Date(119,7,24));
            
            System.out.println(t);
            System.out.println(new Date(119,7,24)+"  "+new Date());
        }
    }
    

      

  • 相关阅读:
    get 传 json 数据
    go text/template html/template invalid memory address or nil pointer dereference
    (转)go语言变参,匿名函数的多种用法
    shell 定义变量 坑
    python3 使用aria2下载的一个脚本
    python3 selenium 超时停止加载,并且捕捉异常, 进行下一步【亲测有效】
    selenium学习笔记——driver.get(url) 页面加载时间太长
    python Selenium chromedriver 自动化超时报错:你需要使用多标签保护罩护体
    selenium等待
    小数据池与代码块
  • 原文地址:https://www.cnblogs.com/gocode/p/handler-of-date2text.html
Copyright © 2020-2023  润新知