工具类:日期处理转换

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
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());
    }
}

  

 


作者:蜀中孤鹰
个性签名:技术如逆水行舟,不进则退;若持之以恒,则水滴穿石。

             IT新手,水平有限,谬误疏漏之处,敬请谅解哦! 

posted @   蜀中孤鹰  阅读(172)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· C# 13 中的新增功能实操
· 万字长文详解Text-to-SQL
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!
点击右上角即可分享
微信分享提示