时间转化工具类分享

**在我们写一个项目中难免会遇到时间的转化或时间的表,自己写已个又很费时,

在这里我写了几个方法希望与大家分享已下,废话不说直接上代码。**

import java.nio.ByteBuffer;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 
 * @author mengwx
 * @date 2016-12-23
 */
public final class UtilDate {

    private static Logger logger = LoggerFactory.getLogger(UtilDate.class);


    /**
     * 将毫秒时间转换为时:分:秒格式
     * @param timeMillis
     * @author HouQingrong
     */
    public static final String formatTimeToString(long timeMillis) {
        String result = "";
        int timeSecond = (int) timeMillis / 1000;
        if (timeSecond == 0)
            return result;

        int h, m, s;
        h = timeSecond / 3600; // 时
        m = timeSecond / 60 % 60; // 分
        s = timeSecond % 60; // 秒

        if (h < 0)
            h = 0;
        if (m < 0)
            m = 0;
        if (s < 0)
            s = 0;

        String hs = Integer.toString(h);
        String ms = Integer.toString(m);
        String ss = Integer.toString(s);

        if (hs.length() < 2)
            hs = "0" + hs; // 0变00,1变01
        if (ms.length() < 2)
            ms = "0" + ms;
        if (ss.length() < 2)
            ss = "0" + ss;

        result = hs + ":" + ms + ":" + ss;
        return result;
    }

    /**
     * String转换年-月-日
     * @param text
     * @return
     */
    public static final Date text2Date(String text) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = (Date) formatter.parse(text);
        } catch (Exception e) {
        }
        return date;
    }
    public static final Date text2Date2(String text) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = (Date) formatter.parse(text);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }

    public static final Date text2Date3(String text) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        Date date = null;
        try {
            date = (Date) formatter.parse(text);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }


    public static final String Date2text(Calendar date) {
        return Date2text(date.getTime());
    }

    public static final String Date2text(java.util.Date date) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String text="";
        try {
            text = formatter.format(date);
        } catch (Exception e) {
        }
        return text;
    }


    public static final String Date3text(java.util.Date date) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String text="";
        try {
            text = formatter.format(date);
        } catch (Exception e) {
        }
        return text;
    }

    public static final Timestamp long2Timestamp2010(long value) {
        Timestamp temp = new Timestamp(value);
        return Timestamp.valueOf("2010-01-01 " + temp.getHours() + ":" + temp.getMinutes() + ":" + temp.getSeconds());
    }

    public static final long time2Long2010(int hours, int minutes, int second) {
        return Timestamp.valueOf("2010-01-01 " + hours + ":" + minutes + ":" + second).getTime();
    }

    public static final Timestamp string2Timestamp2010(String value) {
        String tempstr = "2010-01-01 " + value.substring(0, 2) + ":" + value.substring(2, 4) + ":" + value.substring(4, 6);
        return Timestamp.valueOf(tempstr);
    }

    public static final String time2String2010(int hours, int minutes, int seconds) {
        String s_h = String.valueOf(hours);
        String s_m = String.valueOf(minutes);
        String s_s = String.valueOf(seconds);
        if (hours < 10)
            s_h = "0" + hours;
        if (minutes < 10)
            s_m = "0" + minutes;
        if (seconds < 10)
            s_s = "0" + seconds;
        return s_h + s_m + s_s;
    }

    public static final long compareTwo2010TimeStamp(Timestamp now, Timestamp after) {
        return now.getTime() - after.getTime();
    }

    public static final void writeTimeToBuffer(ByteBuffer buffer, Timestamp time) {
        buffer.putShort((short)(time.getYear() + 1900));
        buffer.put((byte)time.getMonth());
        buffer.put((byte)time.getDate());
        buffer.put((byte)time.getHours());
        buffer.put((byte)time.getMinutes());
        buffer.put((byte)time.getSeconds());
//      System.out.println("Y: " + time.getYear() + ", M: " + time.getMonth() + ", D=" + time.getDate() + ", " +
//              "H: " + time.getHours() + ", M: " + time.getMinutes() + ", S=" + time.getSeconds());
    }

    public static final short getLeftMin(long EndTime) {
        return (short) ((EndTime - System.currentTimeMillis()) / (1000 * 60));
    }

    public static final int getLeftSec(long EndTime){
        long nowTime = System.currentTimeMillis();
        if(EndTime - nowTime <0){
            return 0;
        }
        return  (int)(EndTime - System.currentTimeMillis())/1000;       
    }

    /**
     * 是否是当月第一天
     * @param iDate
     * @return
     */
    public static final boolean isFirstDayOfMonth(long iDate){
        Calendar ca = Calendar.getInstance();
        ca.setTime(new Timestamp(iDate));
        int curDay = ca.get(Calendar.DAY_OF_MONTH);
        return curDay==1;
    }

    /**
     * 获得两个时间的自然日差值
     * @param iDate1
     * @param iDate2
     * @return 
     *      =0 同一天
     *      >0 前面日期大
     *      <0 后面日期大
     */
    public static final int getBetweenDay(long iDate1,long iDate2){
        int between=0;
        Calendar cDate1 = Calendar.getInstance();
        cDate1.setTime(new Timestamp(iDate1));
        Calendar cDate2 = Calendar.getInstance();
        cDate2.setTime(new Timestamp(iDate2));
        int y1 = cDate1.get(Calendar.YEAR);
        int y2 = cDate2.get(Calendar.YEAR);
        if(y1==y2){ //同年 只计算日差 
            between = cDate1.get(Calendar.DAY_OF_YEAR) - cDate2.get(Calendar.DAY_OF_YEAR); 
        }else{
            if(y1>y2){ 
                    between = cDate1.get(Calendar.DAY_OF_YEAR);
                    between += cDate2.getActualMaximum(Calendar.DAY_OF_YEAR)
                            - cDate2.get(Calendar.DAY_OF_YEAR);
                    between += ((y1-y2)-1)*365;
            }else{
                between = cDate2.get(Calendar.DAY_OF_YEAR);
                between += cDate1.getActualMaximum(Calendar.DAY_OF_YEAR)
                        - cDate1.get(Calendar.DAY_OF_YEAR);
                between += ((y2-y1)-1)*365;
                between = -between;
            }
        }
        return between;
    }

    /**
     * 开始时间和结束时间格式固定为如下,例如10:30,,格式不正确都将返回不正确的结果
     * @param startTime
     * @param endTime
     * @return
     */
    public static boolean betweenTime(String startTime ,String endTime){
        boolean result = false;
        if(startTime== null && !startTime.isEmpty()) return result;
        if(endTime== null && !endTime.isEmpty()) return result;
        String[] starts = startTime.split(":");
        String[] ends = endTime.split(":");
        if(starts.length!= 2 && ends.length!=2) return result;
        Calendar start = Calendar.getInstance();
        start.set(Calendar.HOUR_OF_DAY, Integer.parseInt(starts[0]));
        start.set(Calendar.MINUTE, Integer.parseInt(starts[1]));
        start.set(Calendar.SECOND, 0);
        Calendar end = Calendar.getInstance();
        end.set(Calendar.HOUR_OF_DAY, Integer.parseInt(ends[0]));
        end.set(Calendar.MINUTE, Integer.parseInt(ends[1]));
        end.set(Calendar.SECOND, 0);
        Calendar now = Calendar.getInstance();



        if(start.get(Calendar.YEAR) == end.get(Calendar.YEAR) 
                && start.get(Calendar.DAY_OF_YEAR) == end.get(Calendar.DAY_OF_YEAR) 
                && start.get(Calendar.YEAR) == now.get(Calendar.YEAR) 
                && start.get(Calendar.DAY_OF_YEAR)==now.get(Calendar.DAY_OF_YEAR)){
            if(now.before(end) && now.after(start)){
                result = true;
                logger.info("now :"+formatMToString(now.getTimeInMillis()));
                logger.info("start :"+formatMToString(start.getTimeInMillis()));
                logger.info("end :"+formatMToString(end.getTimeInMillis()));
            }
        }
        return result;
    }

    /**
     * 现在时间是否在两个时间段之间
     * @param startTime
     * @param endTime
     * @return
     */
    public static boolean betweenTimeD(Date startTime ,Date endTime){
        boolean result = false;
        if(startTime== null ) return result;
        if(endTime== null ) return result;

        Calendar start = Calendar.getInstance();
        start.setTime(startTime);

        Calendar end = Calendar.getInstance();
        end.setTime(endTime);

        Calendar now = Calendar.getInstance();

        //如果当前时间在结束前,并在开始后,则返回正确
        if(now.before(end) && now.after(start)){
                result = true;
                logger.info("now :"+formatMToString(now.getTimeInMillis()));
                logger.info("start :"+formatMToString(start.getTimeInMillis()));
                logger.info("end :"+formatMToString(end.getTimeInMillis()));
            }

        return result;
    }


    public static boolean timeIsOver(Calendar startC,String endTime){
        boolean result = false; 

        try{
            String[] ends = endTime.split(":");

            Calendar end = Calendar.getInstance();
            end.set(Calendar.HOUR_OF_DAY, Integer.parseInt(ends[0]));
            end.set(Calendar.MINUTE, Integer.parseInt(ends[1]));

             if(startC.after(end))
             {
                 result = true;
             }
        }catch(Exception e)
        {

        }
        return result;
    }



    /**
     * 当前时间是否超过了endTime
     * @param endTime
     * @return
     */
    public static boolean currentTimeIsOver(String endTime){
        boolean result = false; 

        try{
            String[] ends = endTime.split(":");

            Calendar end = Calendar.getInstance();
            end.set(Calendar.HOUR_OF_DAY, Integer.parseInt(ends[0]));
            end.set(Calendar.MINUTE, Integer.parseInt(ends[1]));
            Calendar now = Calendar.getInstance();

             if(now.after(end))
             {
                 result = true;
             }
        }catch(Exception e)
        {

        }
        return result;
    }

    /**
     * 现在时间是否超过传入endTime的时间
     * @param endTime
     * @return
     */
    public static boolean currentTimeIsOverD(Date endTime){
        boolean result = false; 

        try{

            Calendar end = Calendar.getInstance();
            end.setTime(endTime);

            Calendar now = Calendar.getInstance();

             if(now.after(end))
             {
                 result = true;
             }
        }catch(Exception e)
        {

        }
        return result;
    }



    /**
     * 最后进入的时间是否在startTime之前
     * @param endTime
     * @return
     */
    public static boolean enterTimeIsOver(String startTime,long lastEnterTime){
        boolean result = true;          
        try{
            String[] startS = startTime.split(":"); 
            //当前开始的时间段
            Calendar startC = Calendar.getInstance();
            startC.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startS[0]));
            startC.set(Calendar.MINUTE, Integer.parseInt(startS[1]));

            //进入的时间
            Calendar enter = Calendar.getInstance();            
            enter.setTimeInMillis(lastEnterTime);   

             if(enter.before(startC))
             {
                 result = true;
             }else{
                 result = false;
             }
        }catch(Exception e)
        {

        }
        return result;
    }


    /**
     * 将毫秒数转为年月日时分
     * @param timeMillis
     * @return
     */
    public static final String formatMToString(long timeMillis) {       

        try{
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = new Date(timeMillis);          
            return sdf.format(d);
        }

        catch(Exception e)
        {
            return "";
        }
    }


    /**
     * 取得当前时间小时数,24小时制     * 
     * @return
     */
    public static final int getCurrentHour() {      
        Calendar current = Calendar.getInstance();      
        return  current.get(Calendar.HOUR_OF_DAY);

    }


    /**
     * 把用户的状态由int改为sting
     * @param type
     * @return
     */
    public static String userTypeChange(int type){
        String stringtype = null;
        switch (type) {
        case 0:
            stringtype = "guest";
            break;
        case 1:
            stringtype = "normal";
            break;
        case 2:
            stringtype = "vip";
            break;

        default:
            break;
        }
        return stringtype;
    }

    /**
     * 获得两个时间是否是统一个月
     * @param iDate1
     * @param iDate2
     * @return 
     */
    public static boolean isBetweenMouth(long iDate1,long iDate2){

        Calendar cDate1 = Calendar.getInstance();
        cDate1.setTime(new Timestamp(iDate1));
        Calendar cDate2 = Calendar.getInstance();
        cDate2.setTime(new Timestamp(iDate2));
        int y1 = cDate1.get(Calendar.YEAR);
        int y2 = cDate2.get(Calendar.YEAR);
        int m1 = cDate1.get(Calendar.MONTH);
        int m2 = cDate2.get(Calendar.MONTH);
        if(y1==y2 && m1 == m2){ //同年 只计算日差 
            return true;
        }else{
            return false;
        }

    }

    public static void main(String[] s){
        // 4070880000000 2099-1-1 0:0:0
        /*long l = 1341651000000L;

        System.out.println(new Timestamp(l));
        System.out.println(UtilDate.text2Date2("2011-12-2 11:0:0").getTime());
        System.out.println(UtilDate.text2Date2("2011-12-2 11:20:0").getTime());
        System.out.println(UtilDate.text2Date2("2011-12-2 11:30:0").getTime());
        System.out.println(UtilDate.betweenTime("3:30", "4:00"));
        System.out.println(UtilDate.betweenTime("3:00", "10:00"));

        Calendar d1 = Calendar.getInstance();
        for(int i = 1 ;i<31;i++){
            Date d2 = UtilDate.text2Date2("2000-11-"+i+" 11:30:0");
            System.out.println(Date2text(d2)+"-"+ Date2text(d1)+"="+
                    getBetweenDay(d2.getTime(),d1.getTimeInMillis()));
        }
        for(int i = 1 ;i<32;i++){
            Date d2 = UtilDate.text2Date2("2000-12-"+i+" 11:30:0");
            System.out.println(Date2text(d2)+"-"+ Date2text(d1)+"="+
                    getBetweenDay(d2.getTime(),d1.getTimeInMillis()));
        }
        for(int i = 1 ;i<32;i++){
            Date d2 = UtilDate.text2Date2("2001-1-"+i+" 11:30:0");
            System.out.print(Date2text(d2)+"-"+ Date2text(d1)+"=");
            System.out.println(getBetweenDay(d2.getTime(),d1.getTimeInMillis()));
        }*/
        Date date = text2Date("2016-12-23");
        System.out.println(date);
    }


}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值