时间工具类之"获取相差天数"

一.时间工具类DateUtils之"获取相差天数"

 1 /**
 2      * 相差天数
 3      * 
 4      * <p>TODO 方法功能描述
 5      * 
 6      * @param startDate 开始时间
 7      * @param endDate 结束时间
 8      * @return
 9      * long
10      */
11     public static long numberOfDay(Timestamp startDate, Timestamp endDate)
12     {
13 
14         long days = 0;
15 
16         if (startDate == null)
17         {
18             return days;
19         }
20 
21         if (endDate == null)
22         {
23             Calendar a = Calendar.getInstance();
24 
25             endDate = new Timestamp(a.getTimeInMillis());
26         }
27 
28         try
29         {
30             long between = (endDate.getTime() - startDate.getTime()) / 1000;// 除以1000是为了转换成秒
31 
32             days = between / (24 * 60 * 60);
33         }
34         catch (Exception e)
35         {
36 
37         }
38 
39         return days;
40     }

案例

 1    @Test
 2     public void test()
 3     {
 4         // 初始开始时间:2021-3-9
 5         Calendar calendar = Calendar.getInstance();
 6         calendar.set(2021,2,9);
 7         long millis = calendar.getTimeInMillis();
 8         Timestamp timestamp1 = new Timestamp(millis); // timestamp1 = 2021-03-09 09:55:04.821
 9 
10         // 初始结束时间:当前时间2021-3-10
11         Timestamp timestamp2 = new Timestamp(System.currentTimeMillis()); // timestamp2 = 2021-03-10 09:55:04.826
12 
13         // 使用工具类进行比较
14         long completeDiffDays = DateUtils.numberOfDay(timestamp1,timestamp2); // completeDiffDays = 1
15 
16         // 5个月内完成的SKU不计算
17         if (completeDiffDays <= 150)
18         {
19             // 库存为0
20             int normalStock = 0;
21             System.out.println("normalStock = " + normalStock); // normalStock = 0
22         }
23     }

 

二.技术解析:new Timestamp(毫秒值);  时间格式化工具

创建Timestamp的几种方式

 1     @Test
 2     public void wzwtest(){
 3         // 以下三种都是获取当前格式,只是时间戳的声明方式不一样
 4         // 获取当前时间格式(时间戳),保留秒后面3为数
 5         Timestamp time1 = new Timestamp(System.currentTimeMillis()); // 2021-03-10 09:31:52.528
 6         
 7         Timestamp time2 = new Timestamp(new Date().getTime()); // 2021-03-10 09:31:52.528
 8 
 9         Timestamp time3 = new Timestamp(Calendar.getInstance().getTimeInMillis()); // 2021-03-10 09:31:52.528
10 
11         //不建议使用:获取去指定时间 2011-12-11 11:11:11.0
12         Timestamp time4 = new Timestamp(2011-1900,11,11,11,11,11,0);
13     }

 

三.获取相差天数【常用3.0规范】

案例

    @Test
    public void test()
    {
        // 相差的天数
        LocalDateTime state = LocalDateTime.now();
        LocalDateTime end = LocalDateTime.now().plusDays(1);
        // 开始时间:较小时间
        // 结束时间:较大时间
        long days = Duration.between(state, end).toDays();
        System.out.println("相差的天数 = " + days);
    }

结果图

 

 

注意

这里输入的时间类型要是LocalDateTime ,如果输入LocalDate类型会报错:Unsupported unit: Seconds

 

 

 

 

四.补充:获取指定时间戳,可以参考以下案例或我写的博客

1.Calendar类

先由getInstance获取Calendar对象,然后用clear方法将时间重置为(1970.1.1 00:00:00),接下来用set方法设定指定时间,最后用getTimeMillis获取毫秒值。

 1    @Test
 2     public void wzwtest(){
 3         // 创建Calendar对象
 4         Calendar calendar = Calendar.getInstance();
 5         // 清除原有数据
 6         calendar.clear();
 7         // 设置要转换的时间,注意月份,外国是从0开始的
 8         calendar.set(2021,2,15);
 9         // 获取2021年3月15号的时间戳
10         long millis = calendar.getTimeInMillis();
11         // 格式时间戳
12         Timestamp timestamp1 = new Timestamp(millis);
13 
14         System.out.println("timestamp1 = " + timestamp1); //timestamp1 = 2021-03-15 00:00:00.0
15         System.out.println("millis = " + millis); // millis = 1615737600000
16     }

 

2.DateFormat类,利用SimpleDateFormat解决系统时间初始(格式化/解析)问路径题

路径:https://www.cnblogs.com/saoge/p/13567215.html

posted @ 2021-03-10 09:59  骚哥  阅读(947)  评论(0编辑  收藏  举报