TimeUtils.java 4.56 KB
Newer Older
刘基明's avatar
刘基明 committed
1 2 3 4
package com.tanpu.community.util;

import java.time.Duration;
import java.time.Instant;
刘基明's avatar
刘基明 committed
5
import java.time.LocalDate;
刘基明's avatar
刘基明 committed
6
import java.time.LocalDateTime;
刘基明's avatar
刘基明 committed
7
import java.time.LocalTime;
刘基明's avatar
刘基明 committed
8 9 10
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

刘基明's avatar
刘基明 committed
11
public class TimeUtils {
刘基明's avatar
刘基明 committed
12 13 14 15 16 17 18 19 20 21 22 23
    public static long getTimestampOfDateTime(LocalDateTime localDateTime) {
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atZone(zone).toInstant();
        return instant.toEpochMilli();
    }

    public static LocalDateTime getDateTimeOfTimestamp(long timestamp) {
        Instant instant = Instant.ofEpochMilli(timestamp);
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone);
    }

刘基明's avatar
刘基明 committed
24 25 26
    /**
     * 计算迄今时间
     */
刘基明's avatar
刘基明 committed
27 28 29 30 31 32 33 34 35
    public static String calUpToNowTime(LocalDateTime start) {
        Duration between = Duration.between(start, LocalDateTime.now());
        long duration = between.toMinutes();
        if (duration < 1) {
            return "刚刚";
        } else if (duration < 60) {
            return duration + "分钟前";
        } else if (duration < 60 * 24) {
            return duration / 60 + "小时前";
刘基明's avatar
刘基明 committed
36 37 38 39
        } else if (duration < 60 * 48) {
            return "1天前";
        } else if (duration < 60 * 24 * 180) {
            return start.format(DateTimeFormatter.ofPattern("MM-dd HH:mm"));
刘基明's avatar
刘基明 committed
40
        }
刘基明's avatar
刘基明 committed
41
        return start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
刘基明's avatar
刘基明 committed
42 43
    }

刘基明's avatar
刘基明 committed
44 45
    /**
     * 格式化话题列表时间
刘基明's avatar
刘基明 committed
46 47 48
     * 发布时间 = Today,显示时间格式:00:00 ,24小时制
     * 发布时间 = Today-1,显示时间格式:昨日 00:00 ,24小时制
     * 发布时间 <Today-1,显示时间格式:yyyy年mm月dd日
刘基明's avatar
刘基明 committed
49
     */
刘基明's avatar
刘基明 committed
50 51 52 53 54 55 56 57
    public static String formatTopicListTime(LocalDateTime target) {
        LocalDateTime dayBegin = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
        LocalDateTime lastDayBegin = dayBegin.minusDays(1);

        if (target.isAfter(dayBegin)) {
            return target.format(DateTimeFormatter.ofPattern(" HH:mm"));
        } else if (target.isAfter(lastDayBegin)) {
            return target.format(DateTimeFormatter.ofPattern("昨天 HH:mm"));
刘基明's avatar
刘基明 committed
58
        }
刘基明's avatar
刘基明 committed
59
        return target.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
刘基明's avatar
刘基明 committed
60 61
    }

刘基明's avatar
刘基明 committed
62 63 64 65
    public static String format(LocalDateTime start) {
        return start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
    }

刘基明's avatar
刘基明 committed
66 67 68 69 70
    public static LocalDateTime reFormat(String time) {

       return LocalDateTime.parse(time,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
    }

刘基明's avatar
刘基明 committed
71
    //计算迄今分钟
刘基明's avatar
刘基明 committed
72
    public static long calMinuteTillNow(LocalDateTime start) {
刘基明's avatar
刘基明 committed
73 74 75
        if (start==null){
            return 0L;
        }
刘基明's avatar
刘基明 committed
76 77 78 79
        Duration between = Duration.between(start, LocalDateTime.now());
        return between.toMinutes();
    }

刘基明's avatar
刘基明 committed
80 81
    //计算迄今毫秒数
    public static long calMillisTillNow(LocalDateTime start) {
刘基明's avatar
刘基明 committed
82 83 84
        if (start==null){
            return 0L;
        }
刘基明's avatar
刘基明 committed
85 86 87 88 89 90
        Duration between = Duration.between(start, LocalDateTime.now());
        return between.toMillis();
    }

    //计算迄今天数
    public static long calDaysTillNow(LocalDateTime start) {
刘基明's avatar
刘基明 committed
91 92 93
        if (start==null){
            return 0L;
        }
刘基明's avatar
刘基明 committed
94 95 96 97
        Duration between = Duration.between(start, LocalDateTime.now());
        return between.toDays();
    }

98
    //计算迄今小时数
刘基明's avatar
刘基明 committed
99
    public static long calHoursTillNow(LocalDateTime start) {
刘基明's avatar
刘基明 committed
100 101 102
        if (start==null){
            return 0L;
        }
刘基明's avatar
刘基明 committed
103 104 105 106
        Duration between = Duration.between(start, LocalDateTime.now());
        return between.toHours();
    }

刘基明's avatar
刘基明 committed
107 108

    //计算n天前的时间
刘基明's avatar
刘基明 committed
109
    public static LocalDateTime getDaysBefore(Integer number) {
110
        return LocalDateTime.now().minusDays(number);
刘基明's avatar
刘基明 committed
111 112
    }

刘基明's avatar
刘基明 committed
113 114 115 116 117 118 119 120 121
    public static void main(String[] args) {
        System.out.println(calUpToNowTime(LocalDateTime.now().minusDays(180)));
        System.out.println(calUpToNowTime(LocalDateTime.now().minusDays(1)));
        System.out.println(calUpToNowTime(LocalDateTime.now().minusDays(18)));
        System.out.println(calUpToNowTime(LocalDateTime.now().minusHours(2)));
        System.out.println(calUpToNowTime(LocalDateTime.now().minusMinutes(12)));
        System.out.println(calUpToNowTime(LocalDateTime.now().minusSeconds(12)));
    }

刘基明's avatar
刘基明 committed
122
    public static boolean lessThan(String cacheTime, LocalDateTime updateTime) {
123
        return calMillisTillNow(reFormat(cacheTime)) > calMillisTillNow(updateTime);
124 125 126
    }

    public static boolean lessThan(LocalDateTime before, LocalDateTime after) {
127
        return calMillisTillNow(before) > calMillisTillNow(after);
刘基明's avatar
刘基明 committed
128
    }
刘基明's avatar
刘基明 committed
129
}