时间工具

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值