常用代码整理:时间工具类(TimeUtil)

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/zeqiao/article/details/82864114

说明:大部分内容都是参考别的文章,这里做整理是为了以后的编程有实用的模板,可以即需即用。

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TimeUtil {

    /**
     * 默认是 yyyy-MM-dd HH:mm:ss
     * 如果要其他格式可以通过 TimeUtil.SHORT_SDF 直接引用
     * 也可以自己写 "yyyy-MM-dd HH"
     */
    public final static SimpleDateFormat SHORT_SDF = new SimpleDateFormat("yyyy-MM-dd");
    public final static SimpleDateFormat LONG_SDF_DEFAULT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 按默认格式转换 millis2String
     */
    public static String millis2String(long millis) {
        return millis2String(millis, LONG_SDF_DEFAULT);
    }

    /**
     * 按指定格式转换 millis2String
     */
    public static String millis2String(long millis, DateFormat format) {
        return format.format(new Date(millis));
    }

    /**
     * 按默认格式转换 string2Millis
     */
    public static long string2Millis(String time) {
        return string2Millis(time, LONG_SDF_DEFAULT);
    }

    /**
     * 按指定格式转换 string2Millis
     */
    public static long string2Millis(String time, DateFormat format) {
        try {
            return format.parse(time).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return -1;
    }

    /**
     * 按默认格式转换 string2Date
     */
    public static Date string2Date(String time) {
        return string2Date(time, LONG_SDF_DEFAULT);
    }

    /**
     * 按指定格式转换 string2Date
     */
    public static Date string2Date(String time, DateFormat format) {
        try {
            return format.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 按默认格式转换 date2String
     */
    public static String date2String(Date date) {
        return date2String(date, LONG_SDF_DEFAULT);
    }

    /**
     * 按指定格式转换 string2Date
     */
    public static String date2String(Date date, DateFormat format) {
        return format.format(date);
    }

    /**
     * date2String
     */
    public static long date2Millis(Date date) {
        return date.getTime();
    }

    /**
     * millis2Date
     */
    public static Date millis2Date(long millis) {
        return new Date(millis);
    }

    /*
     * 如果能通过系统API能简单获取,为什么还要写入工具类?!
     * 如果写入工具类,以后要改就麻烦了,所以能不写入就不写
     */
    /*public static long getCurrentTimeInLong() {
        return System.currentTimeMillis();
    }*/

    /**
     * 获取给定天数前的日期
     */
    public static String getDateBefore(int days) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -days);
        return SHORT_SDF.format(cal.getTime());
    }

    /**
     * 获取给定天数后的日期
     */
    public static String getDateAfter(int days) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, days);
        return SHORT_SDF.format(cal.getTime());
    }

    /**
     * 如果在1分钟之内发布的显示 "刚刚" 如果在1个小时之内发布的显示 "XX分钟之前" 如果在1天之内发布的显示 "XX小时之前"
     * 如果在今年的1天之外的只显示 “月-日”,例如 “05-03” 如果不是今年的显示“年-月-日”,例如 “2000-01-01”
     */
    public static String getTranslateTime(String time) {
        Date nowTime = new Date();
        String currDate = LONG_SDF_DEFAULT.format(nowTime);
        long currentMilliseconds = nowTime.getTime();
        long timeMilliseconds = 0;
        Date date = null;
        try {
            // 将给定的字符串中的日期提取出来
            date = LONG_SDF_DEFAULT.parse(time);
        } catch (Exception e) {
            e.printStackTrace();
            return time;
        }
        if (date != null) {
            timeMilliseconds = date.getTime();
        }

        long timeDifferent = currentMilliseconds - timeMilliseconds;
        if (timeDifferent < 60000) {
            return "刚刚";
        }
        if (timeDifferent < 3600000) {
            long longMinute = timeDifferent / 60000;
            int minute = (int) (longMinute % 100);
            return minute + "分钟之前";
        }
        long l = 24 * 60 * 60 * 1000; // 每天的毫秒数
        if (timeDifferent < l) {
            long longHour = timeDifferent / 3600000;
            int hour = (int) (longHour % 100);
            return hour + "小时之前";
        }
        if (timeDifferent >= l) {
            String currYear = currDate.substring(0, 4);
            String year = time.substring(0, 4);
            if (!year.equals(currYear)) {
                return time.substring(0, 10);
            }
            return time.substring(5, 10);
        }
        return time;
    }

}

参考文章:
1、Lazy/TimeUtils.java at master · l123456789jy/Lazy · GitHub
2、AndroidUtilCode/TimeUtils.java at master · Blankj/AndroidUtilCode · GitHub
3、https://www.cnblogs.com/realshijing/p/8419421.html
4、https://blog.csdn.net/u012811342/article/details/78853236

猜你喜欢

转载自blog.csdn.net/zeqiao/article/details/82864114
今日推荐