Commit 2fc16a063518ef062f6353ddebffbd70ee2b9042

Authored by xp.Huang
1 parent 786ec9f8

fix: 任务中心,执行后返回的最近执行时间

  1 +package org.thingsboard.server.dao.util.yunteng.task;
  2 +
  3 +import java.time.LocalDateTime;
  4 +import java.time.ZoneOffset;
  5 +
  6 +public class RelativeDateHandler {
  7 + private static final long ONE_MINUTE = 60000L;
  8 + private static final long ONE_HOUR = 3600000L;
  9 + private static final long ONE_DAY = 86400000L;
  10 + private static final long ONE_WEEK = 604800000L;
  11 +
  12 + private static final String ONE_SECOND_AGO = "秒前";
  13 + private static final String ONE_MINUTE_AGO = "分钟前";
  14 + private static final String ONE_HOUR_AGO = "小时前";
  15 + private static final String ONE_DAY_AGO = "天前";
  16 + private static final String ONE_MONTH_AGO = "月前";
  17 + private static final String ONE_YEAR_AGO = "年前";
  18 +
  19 + public static String format(LocalDateTime date) {
  20 + Long currentTime = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
  21 + Long executeTime = date.toInstant(ZoneOffset.of("+8")).toEpochMilli();
  22 + long delta = currentTime - executeTime;
  23 + if (delta < ONE_MINUTE) {
  24 + long seconds = toSeconds(delta);
  25 + return seconds <= 0 ? "刚刚" : seconds + ONE_SECOND_AGO;
  26 + }
  27 + if (delta < 45L * ONE_MINUTE) {
  28 + long minutes = toMinutes(delta);
  29 + return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;
  30 + }
  31 + if (delta < 24L * ONE_HOUR) {
  32 + long hours = toHours(delta);
  33 + return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;
  34 + }
  35 + if (delta < 48L * ONE_HOUR) {
  36 + return "昨天";
  37 + }
  38 + if (delta < 30L * ONE_DAY) {
  39 + long days = toDays(delta);
  40 + return (days <= 0 ? 1 : days) + ONE_DAY_AGO;
  41 + }
  42 + if (delta < 12L * 4L * ONE_WEEK) {
  43 + long months = toMonths(delta);
  44 + return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;
  45 + } else {
  46 + long years = toYears(delta);
  47 + return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;
  48 + }
  49 + }
  50 +
  51 + private static long toSeconds(long date) {
  52 + return date / 1000L;
  53 + }
  54 +
  55 + private static long toMinutes(long date) {
  56 + return toSeconds(date) / 60L;
  57 + }
  58 +
  59 + private static long toHours(long date) {
  60 + return toMinutes(date) / 60L;
  61 + }
  62 +
  63 + private static long toDays(long date) {
  64 + return toHours(date) / 24L;
  65 + }
  66 +
  67 + private static long toMonths(long date) {
  68 + return toDays(date) / 30L;
  69 + }
  70 +
  71 + private static long toYears(long date) {
  72 + return toMonths(date) / 365L;
  73 + }
  74 +
  75 + public static void main(String[] args) {}
  76 +}
... ...