ustcyc
2025-01-07 de5d55508afd27fb2b47e6d4d6fd9984525c222c
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
package com.zhitan.common.utils.time;
 
import com.zhitan.common.enums.TimeType;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
 
import java.util.Date;
 
public class TimeManager {
 
  public static final TimeType[] typeArray = {TimeType.LIVE, TimeType.DAY, TimeType.HOUR,
      TimeType.MONTH, TimeType.SCHEDULING, TimeType.YEAR};
  private static final DateTimeFormatter pastDataFormat = DateTimeFormat.forPattern
      ("yyyyMMddHHmmss");
  private static final DateTimeFormatter hourFormat = DateTimeFormat.forPattern("yyyyMMddHH");
  private static final DateTimeFormatter dayFormat = DateTimeFormat.forPattern("yyyyMMdd");
  private static final DateTimeFormatter monthFormat = DateTimeFormat.forPattern("yyyyMM");
  private static final DateTimeFormatter yearFormat = DateTimeFormat.forPattern("yyyy");
 
  private static final String livePrefix = "L";
  private static final String hourPrefix = "H";
  private static final String dayPrefix = "D";
  private static final String monthPrefix = "M";
  private static final String yearPrefix = "Y";
 
  public static String getExecuteTimeCode(Date time, TimeType type, int delayTime) {
    DateTime dateTime = new DateTime(time).plusSeconds(-delayTime);
    return getTimeCode(dateTime.toDate(), type);
  }
 
  public static String getTimeCode(Date time, TimeType type) {
    switch (type) {
      case LIVE:
        return livePrefix;
      case DAY:
        return dayPrefix + dayFormat.print(new DateTime(time));
      case HOUR:
        return hourPrefix + hourFormat.print(new DateTime(time));
      case MONTH:
        return monthPrefix + monthFormat.print(new DateTime(time));
      case YEAR:
        return yearPrefix + yearFormat.print(new DateTime(time));
      default:
        return null;
    }
  }
 
  public static Date getBeginTime(String timeCode) {
    Date beginTime = getTime(timeCode, 0);
    if (getTimeType(timeCode) == TimeType.DAY) {
      beginTime = new DateTime(beginTime).plusHours(9).toDate();
    }
 
    return beginTime;
  }
 
  public static Date getEndTime(String timeCode) {
    Date endTime = getTime(timeCode, 1);
    if (getTimeType(timeCode) == TimeType.DAY) {
      endTime = new DateTime(endTime).plusHours(9).toDate();
    }
 
    return endTime;
  }
 
  public static Date getTime(String timeCode) {
    return getTime(timeCode, 0);
  }
 
  public static Date getTime(String timeCode, int offset) {
    TimeType type = getTimeType(timeCode);
    String timeStr = timeCode.substring(1);
    Date result = null;
    DateTime dateTime;
 
    try {
      if (type == null) {
        result = pastDataFormat.parseDateTime(timeStr).toDate();
        if (offset != 0) {
          dateTime = new DateTime(result);
          dateTime = dateTime.plusSeconds(offset);
          result = dateTime.toDate();
        }
      } else {
        switch (type) {
          case LIVE:
            result = new Date();
            break;
          case DAY:
            result = dayFormat.parseDateTime(timeStr).toDate();
            if (offset != 0) {
              dateTime = new DateTime(result);
              dateTime = dateTime.plusDays(offset);
              result = dateTime.toDate();
            }
            break;
          case HOUR:
            result = hourFormat.parseDateTime(timeStr).toDate();
            if (offset != 0) {
              dateTime = new DateTime(result);
              dateTime = dateTime.plusHours(offset);
              result = dateTime.toDate();
            }
            break;
          case MONTH:
            result = monthFormat.parseDateTime(timeStr).toDate();
            if (offset != 0) {
              dateTime = new DateTime(result);
              dateTime = dateTime.plusMonths(offset);
              result = dateTime.toDate();
            }
            break;
          case YEAR:
            result = yearFormat.parseDateTime(timeStr).toDate();
            if (offset != 0) {
              dateTime = new DateTime(result);
              dateTime = dateTime.plusYears(offset);
              result = dateTime.toDate();
            }
            break;
          default:
            break;
        }
      }
    } catch (IllegalArgumentException e) {
      e.printStackTrace();
    }
 
    return result;
  }
 
  public static TimeType getTimeType(String timeCode) {
    switch (timeCode.substring(0, 1).toUpperCase()) {
      case livePrefix:
        return TimeType.LIVE;
      case hourPrefix:
        return TimeType.HOUR;
      case dayPrefix:
        return TimeType.DAY;
      case monthPrefix:
        return TimeType.MONTH;
      case yearPrefix:
        return TimeType.YEAR;
      default:
        return null;
    }
  }
}