package im.qingtui.man.hour.util;
import java.util.Calendar;
import java.util.Date;
/**
* 判断时间区间工具类,会议使用
*
* @author qiaofeng
*/
public class StartAndEndDateUtil {
private static final String SYMBOL = "~";
/**
* 根据开始时间和结束时间获取时间文案
* @param startTime 开始时间
* @param endTime 结束时间
* @return 显示的时间类型
*/
public static String getMeetingDateInfo(long startTime, long endTime){
//跨天
if (acrossTheDay(startTime, endTime)){
return acrossTheDayDateStr(startTime, endTime);
}else {
return notAcrossTheDayDateStr(startTime, endTime);
}
}
/**
* 判断时间区间是否跨年
* @param startTime 开始时间
* @param endTime 结束时间
* @return true表示跨年,false跨年
*/
public static boolean acrossTheYears(long startTime, long endTime){
Calendar calendarStart = Calendar.getInstance();
calendarStart.setTimeInMillis(startTime);
int yearsStart = calendarStart.get(Calendar.YEAR);
Calendar calendarEnd = Calendar.getInstance();
calendarEnd.setTimeInMillis(endTime);
int yearsEnd = calendarEnd.get(Calendar.YEAR);
if (yearsEnd == yearsStart){
return false;
}else {
return true;
}
}
/**
* 判断时间是否是今年
* @param time 需要判断的时间
* @return true是当年
*/
public static boolean timeTheThatYears(long time){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
//需要判断的时间年份
int timeYear = calendar.get(Calendar.YEAR);
calendar.setTimeInMillis(System.currentTimeMillis());
int nowYear = calendar.get(Calendar.YEAR);
if (timeYear == nowYear){
return true;
}
return false;
}
/**
* 判断时间区间是否跨天,同一年内
* @param startTime 开始时间
* @param endTime 结束时间
* @return true表示跨天
*/
public static boolean acrossTheDay(long startTime, long endTime){
//跨年
if (acrossTheYears(startTime, endTime)){
return true;
}
//未跨年
return acrossTheDayNotYear(startTime, endTime);
}
/**
* 判断时间区间是否跨天 ,不管年份
* @param startTime 开始时间
* @param endTime 结束时间
* @return true表示跨天
*/
public static boolean acrossTheDayNotYear(long startTime, long endTime){
Calendar calendarStart = Calendar.getInstance();
calendarStart.setTimeInMillis(startTime);
int startDay = calendarStart.get(Calendar.DAY_OF_MONTH);
Calendar calendarEnd = Calendar.getInstance();
calendarEnd.setTimeInMillis(endTime);
int endDate = calendarEnd.get(Calendar.DAY_OF_MONTH);
if (startDay == endDate){
return false;
}else {
return true;
}
}
/**
* 获取时间戳是星期几
* @param dateTime 需要判断的时间戳
* @return 周几
*/
public static String getDateWeek(long dateTime){
String[] weekDays = { "周天", "周一", "周二", "周三", "周四", "周五", "周六 " };
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(dateTime);
int weekDay = calendar.get(Calendar.DAY_OF_WEEK) -1; //因为周是从7开始的
if (weekDay < 0){
weekDay = 0;
}
return weekDays[weekDay];
}
/**
* 跨天情况,返回的时间格式
* @param startTime 开始时间
* @param endTime 结束时间
* @return 跨天的时间显示格式
*/
public static String acrossTheDayDateStr(long startTime, long endTime){
String dateStr;
if (acrossTheYears(startTime, endTime) || !timeTheThatYears(startTime)){
//跨年 yyyy-MM-dd HH:mm ~ yyyy-MM-dd HH:mm
dateStr = DateUtil.formatDate(startTime, DateUtil.DATE_FORMAT_YEAR) + SYMBOL + DateUtil.formatDate(endTime, DateUtil.DATE_FORMAT_YEAR);
}else {
//当年 xx月xx天 HH:mm ~ xx月xx天 HH:mm
dateStr = getMonthDayHour(startTime) + SYMBOL + getMonthDayHour(endTime);
}
return dateStr;
}
/**
* 未跨天情况,返回的时间格式
* @param startTime 开始时间
* @param endTime 结束时间
* @return 跨天的时间显示格式
*/
public static String notAcrossTheDayDateStr(long startTime, long endTime){
String dateStr;
if (checkDateDay(startTime, endTime) >2){
//不属于昨天、今天、明天中的一天
if (timeTheThatYears(startTime)){
//属于今年 xx月xx天 周x HH:mm ~ HH:mm
dateStr = getMonthDayWeekHour(startTime) + SYMBOL + DateUtil.formatDate(endTime, DateUtil.DATE_FORMAT_DAY);
}else {
//不属于今年 yyyy-MM-dd HH:mm ~ HH:mm
dateStr = DateUtil.formatDate(startTime, DateUtil.DATE_FORMAT_YEAR) + SYMBOL + DateUtil.formatDate(endTime, DateUtil.DATE_FORMAT_DAY);
}
}else {
//属于昨天、今天、明天中的一天
dateStr = getDateDetail(startTime, endTime);
}
return dateStr;
}
/**
* 将时间变为xx月xx天 HH:mm
* @return 对应格式字符串
*/
public static String getMonthDayHour(long time){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
return (calendar.get(Calendar.MONTH) +1) + "月" + calendar.get(Calendar.DAY_OF_MONTH) + "日 " + DateUtil.formatDate(time, DateUtil.DATE_FORMAT_DAY);
}
/**
* 获取时间格式为 xx月xx天 周x HH:mm
* @param time 需要转换格式的时间戳
* @return xx月xx天 周x HH:mm的字符串时间
*/
public static String getMonthDayWeekHour(long time){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
return (calendar.get(Calendar.MONTH) +1) + "月" + calendar.get(Calendar.DAY_OF_MONTH) + "日 " + getDateWeek(time) + " " + DateUtil.formatDate(time, DateUtil.DATE_FORMAT_DAY);
}
/**
* 判断会议时间是否在那天
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return 时间消息并增加换行符
*/
public static String getDateDetail(long startTime, long endTime) {
int status = checkDateDay(startTime, endTime);
String dateMsg;
switch (status) {
case 0:
dateMsg = Constants.YESTERDAY;
break;
case 1:
dateMsg = Constants.TODAY;
break;
case 2:
dateMsg = Constants.TOMORROW;
break;
default:
dateMsg = "";
}
//昨天,今天,明天使用HH:mm时间格式
if (StringUtil.isNotEmpty(dateMsg)) {
dateMsg = dateMsg + DateUtil.formatDate(startTime, DateUtil.DATE_FORMAT_DAY + SYMBOL + DateUtil.formatDate(endTime, DateUtil.DATE_FORMAT_DAY));
} else {
dateMsg = dateMsg + DateUtil.formatDate(startTime, DateUtil.DATE_FORMAT_YEAR) + SYMBOL + DateUtil.formatDate(endTime, DateUtil.DATE_FORMAT_YEAR);
}
return dateMsg;
}
/**
* 判断时间是今天、明天、昨天
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return 0昨天,1今天,2明天,3之外的时间
*/
public static int checkDateDay(long startTime, long endTime) {
long oneDay = 24L * 60 * 60 * 1000;
long nowDayStar = nowDay();
//昨天0点时分
long upDayStar = nowDayStar - oneDay;
//明天0点时分
long downDayStar = nowDayStar + oneDay;
//会议时间是在昨天
if (startTime > upDayStar && endTime < nowDayStar) {
return 0;
}
if (startTime > nowDayStar && endTime < downDayStar) {
return 1;
}
//会议是在明天
if (startTime > downDayStar && endTime < downDayStar + oneDay) {
return 2;
}
return 3;
}
/*获取当天0点的时间*/
public static long nowDay() {
//当天0点时分
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTime().getTime();
}
}
package im.qingtui.man.hour.util;
/**
* @author qiaofeng
*/
public final class Constants {
/**
* 日期
*/
public static final String TODAY = "今天";
public static final String YESTERDAY = "昨天";
public static final String TOMORROW = "明天";
}
package im.qingtui.man.hour.util;
import im.qingtui.meeting.constants.MeetingConstance;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author qiaofeng
*/
public class DateUtil {
public static final String DATE_FORMAT_YEAR = "yyyy/MM/dd HH:mm";
public static final String DATE_FORMAT_YEAR_MINUTE = "yyyy/MM/dd HH:mm:ss";
public static final String DATE_FORMAT_DAY = "HH:mm";
/**
* 时间戳转换成日期格式字符串
*
* @param timeStamp 精确到豪秒
* @return 特定格式的时间
*/
public static String convertTimeStampToString(long timeStamp, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(timeStamp));
}
/**
* 获取当前时间
* @return 当前时间字符串
*/
public static String getNowTime(){
return convertTimeStampToString(System.currentTimeMillis(), DATE_FORMAT_YEAR_MINUTE);
}
/**
* 时间戳转换成日期格式字符串
*
* @param timeStamp 精确到豪秒
* @return 特定格式的时间
*/
public static String convertToString(long timeStamp) {
return convertTimeStampToString(timeStamp, DATE_FORMAT_YEAR_MINUTE);
}
/**
* 会议发送的时间消息
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return 时间消息
*/
public static String meetingMsg(long startTime, long endTime) {
return MeetingConstance.MEETING_DATE_MSG + ":" + StartAndEndDateUtil.getMeetingDateInfo(startTime, endTime);
}
/**
* 返回特定格式的时间
*
* @param time 时间戳
* @param format 时间格式
* @return 对应格式的字符串
*/
public static String formatDate(long time, String format) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
return simpleDateFormat.format(new Date(time));
}
/**
* 获取某天结束时间(23:59:59)
*/
public static long getEndTimeOfDay(long timeStamp) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeStamp);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTimeInMillis();
}
/**
* 时间加减年数
*/
public static Date dateAddYears(Date startDate, int years) {
if (startDate == null) {
startDate = new Date();
}
Calendar c = Calendar.getInstance();
c.setTime(startDate);
c.set(Calendar.YEAR, c.get(Calendar.YEAR) + years);
return c.getTime();
}
/**
* 获取当前年月日凌晨时间点
*/
public static Date getZeroDate() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date zero = calendar.getTime();
return zero;
}
}