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; } } }