最全时间工具类timeUtile

本文介绍了一个全面的时间工具类TimeUtil,提供日期时间的转换、计算和格式化等功能,如时间戳与字符串间的转换、日期间距描述、获取网络时间等。使用简单,大大简化了Android开发中关于日期时间的操作。
摘要由CSDN通过智能技术生成

写代码最烦的是什么,写个日期啥,或者判断一个日期是什么星座还要写一大推代码,岂不是很累,伸手党福利来了



import android.support.annotation.NonNull;

import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import 自己的路径.TimeConstants;

/**
 * @author xiaoye
 * @fileName TimeUtils
 * @createDate 2018/11/5 9:26
 * @email 1025982282@qq.com
 * @desc 全局统一Toast工具类
 */
public final class TimeUtils {
    private TimeUtils(){
        throw new UnsupportedOperationException("u can't touch me !");
    }

    /**
     * 英文简写(默认)日期格式,如:12-01
     */
    public static final String FORMAT_MONTH_DAY = "MM-dd";
    /**
     * 英文简写(默认)日期格式,如:2010-12-01
     */
    public static final String FORMAT_YEAR_MONTH_DAY = "yyyy-MM-dd";

    /**
     * 英文简写(默认)时间格式,如:23:14:01
     */
    public static final String FORMAT_TIME = "HH:mm:ss";
    /**
     * 英文简写(默认)时间格式(12小时制),如:10:14:01
     */
    public static final String FORMAT_TIME_12HOUR = "hh:mm:ss";
    /**
     * 英文简写(默认)全时间格式,如:2010-12-01 23:14:05
     */
    public static final String FORMAT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
    /**
     * 英文简写(默认)全时间格式,如:2010-12-01 23:14:05
     */
    public static final String FORMAT_DATE_PATTERN_N = "yyyy/MM/dd HH:mm:ss";
    /**
     * 英文简写(默认)全时间格式(12小时制),如:2010-12-01 10:14:05
     */
    public static final String FORMAT_DATE_PATTERN_12HOUR = "yyyy-MM-dd hh:mm:ss";
    /**
     * 中文简写日期格式,如:12月01日
     */
    public static final String FORMAT_CN_MONTH_DAY = "MM月dd日";
    /**
     * 中文简写日期格式,如:2010年12月01日
     */
    public static final String FORMAT_CN_YEAR_MONTH_DAY = "yyyy年MM月dd日";
    /**
     * 中文简写(默认)时间格式,如:23:14:01
     */
    public static final String FORMAT_CN_TIME = "HH时mm分ss秒";
    /**
     * 中文简写(默认)时间格式(12小时制),如:10:14:01
     */
    public static final String FORMAT_CN_TIME_12HOUR = "hh时mm分ss秒";
    /**
     * 中文简写全时间格式,如:2010年12月01日 23时14分05秒
     */
    public static final String FORMAT_CN_DATE_PATTERN = "yyyy年MM月dd日 HH时mm分ss秒";
    /**
     * 中文简写全时间格式,如:2010年12月01日 10时14分05秒
     */
    public static final String FORMAT_CN_DATE_PATTERN_12HOUR = "yyyy年MM月dd日 hh时mm分ss秒";

    /**
     * 使每个线程获取的SimpleDateFormat不是同一个对象
     */
    private static final ThreadLocal<SimpleDateFormat> SDF_THREAD_LOCAL = new ThreadLocal<>();

    /**
     * 获取默认的SimpleDateFormat
     * @return 默认的SimpleDateFormat ,时间格式为yyyy-MM-dd HH:mm:ss
     */
    public static SimpleDateFormat getDefaultFormat() {
        SimpleDateFormat simpleDateFormat = SDF_THREAD_LOCAL.get();
        if (simpleDateFormat == null) {
            simpleDateFormat = new SimpleDateFormat(FORMAT_DATE_PATTERN, Locale.getDefault());
            SDF_THREAD_LOCAL.set(simpleDateFormat);
        }
        return simpleDateFormat;
    }
    /**
     * 获取默认的SimpleDateFormat
     * @return 默认的SimpleDateFormat ,时间格式为yyyy/MM/dd HH:mm:ss
     */
    public static SimpleDateFormat getNFormat() {
        SimpleDateFormat simpleDateFormat = SDF_THREAD_LOCAL.get();
        if (simpleDateFormat == null) {
            simpleDateFormat = new SimpleDateFormat(FORMAT_DATE_PATTERN_N, Locale.getDefault());
            SDF_THREAD_LOCAL.set(simpleDateFormat);
        }
        return simpleDateFormat;
    }

    /**
     * 时间戳(毫秒)转为时间字符串,格式为yyyy-MM-dd HH:mm:ss
     *
     * @param millis 时间戳(毫秒)
     * @return 时间字符串,格式为yyyy-MM-dd HH:mm:ss
     */
    public static String millis2String(final long millis) {
        return millis2String(millis, getDefaultFormat());
    }

    /**
     * 时间戳(毫秒)转为时间字符串
     *
     * @param millis 时间戳(毫秒)
     * @param format dateFormat
     * @return 时间字符串
     */
    public static String millis2String(final long millis, @NonNull final DateFormat format) {
        return format.format(new Date(millis));
    }

    /**
     * 时间字符串转时间戳(毫秒),注意:时间格式应为yyyy-MM-dd HH:mm:ss
     *
     * @param time 时间字符串,注意:格式应为yyyy-MM-dd HH:mm:ss
     * @return 时间戳(毫秒)
     */
    public static long string2Millis(final String time) {
        return string2Millis(time, getDefaultFormat());
    }

    /**
     *  时间字符串转时间戳(毫秒)
     *
     * @param time   时间字符串,格式与format相互对应
     * @param format 自定义的DateFormat
     * @return 时间戳(毫秒)
     */
    public static long string2Millis(final String time, @NonNull final DateFormat format) {
        try {
            return format.parse(time).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return -1;
    }

    /**
     * 时间字符串转为Date对象
     *
     * @param time 时间字符串,注意:格式应为yyyy-MM-dd HH:mm:ss
     * @return date对象
     */
    public static Date string2Date(final String time) {
        return string2Date(time, getDefaultFormat());
    }

    /**
     * 时间字符串转为Date对象
     *
     * @param time   时间字符串,与format对应
     * @param format 自定义的format
     * @return date对象
     */
    public static Date string2Date(final String time, @NonNull final DateFormat format) {
        try {
            return format.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * date转时间字符串
     *
     * @param date date对象
     * @return 时间字符串,格式为:yyyy-MM-dd HH:mm:ss
     */
    public static String date2String(final Date date) {
        return date2String(date, getDefaultFormat());
    }

    /**
     *  date转时间字符串
     *
     * @param date   date对象
     * @param format 自定义的dateFormat
     * @return 时间字符串,格式为format设置的格式
     */
    public static String date2String(final Date date, @NonNull final DateFormat format) {
        return format.format(date);
    }

    /**
     * date转时间戳(毫秒)
     *
     * @param date 要转的date
     * @return 时间戳(毫秒)
     */
    public static long date2Millis(final Date date) {
        return date.getTime();
    }

    /**
     * 时间戳(毫秒)转date
     *
     * @param millis 时间戳(毫秒)
     * @return date
     */
    public static Date millis2Date(final long millis) {
        return new Date(millis);
    }

    /**
     * Return the time span, in unit.
     * <p>The pattern is {@code yyyy-MM-dd HH:mm:ss}.</p>
     *
     * @param time1 The first formatted time string.
     * @param time2 The second formatted time string.
     * @param unit  The unit of time span.
     *              <ul>
     *              <li>{@link TimeConstants#MSEC}</li>
     *              <li>{@link TimeConstants#SEC }</li>
     *              <li>{@link TimeConstants#MIN }</li>
     *              <li>{@link TimeConstants#HOUR}</li>
     *              <li>{@link TimeConstants#DAY }</li>
     *              </ul>
     * @return the time span, in unit
     */
    public static long getTimeSpan(final String time1,
                                   final String time2,
                                   @TimeConstants.Unit final int unit) {
        return getTimeSpan(time1, time2, getDefaultFormat(), unit);
    }

    /**
     * 返回两时间之间的跨度,可选跨度时间单位符号
     *
     * @param time1  第一个时间字符串
     * @param time2  第二个时间字符串
     * @param format 时间格式对象DateFormat
     * @param unit   时间跨度单位
     *               <ul>
     *               <li>{@link TimeConstants#MSEC}</li>
     *               <li>{@link TimeConstants#SEC }</li>
     *               <li>{@link TimeConstants#MIN }</li>
     *               <li>{@link TimeConstants#HOUR}</li>
     *               <li>{@link TimeConstants#DAY }</li>
     *               </ul>
     * @return 两时间之间的跨度,单位为设置的时间单位
     */
    public static long getTimeSpan(final String time1,
                                   final String time2,
                                   @NonNull final DateFormat format,
                                   @TimeConstants.Unit final int unit) {
        return millis2TimeSpan(string2Millis(time1, format) - string2Millis(time2, format), unit);
    }

    /**
     * 返回两时间之间的跨度,可选跨度时间单位符号
     *
     * @param date1 第一个时间date
     * @param date2 第二个时间date
     * @param unit  时间跨度单位
     *              <ul>
     *              <li>{@link TimeConstants#MSEC}</li>
     *              <li>{@link TimeConstants#SEC }</li>
     *              <li>{@link TimeConstants#MIN }</li>
     *              <li>{@link TimeConstants#HOUR}</li>
     *              <li>{@link TimeConstants#DAY }</li>
     *              </ul>
     * @return 两时间之间的跨度,单位为设置的时间单位
     */
    public static long getTimeSpan(final Date date1,
                                   final Date date2,
                                   @TimeConstants.Unit final int unit) {
        return millis2TimeSpan(date2Millis(date1) - date2Millis(date2), unit);
    }

    /**
     * 返回两时间之间的跨度,可选跨度时间单位符号
     *
     * @param millis1 第一个时间的时间戳
     * @param millis2 第二个时间的时间戳
     * @param unit    时间跨度单位
     *                <ul>
     *                <li>{@link TimeConstants#MSEC}</li>
     *                <li>{@link TimeConstants#SEC }</li>
     *                <li>{@link TimeConstants#MIN }</li>
     *                <li>{@link TimeConstants#HOUR}</li>
     *                <li>{@link TimeConstants#DAY }</li>
     *                </ul>
     * @return 两时间之间的跨度,单位为设置的时间单位
     */
    public static long getTimeSpan(final long millis1,
                                   final long millis2,
                                   @TimeConstants.Unit final int unit) {
        return millis2TimeSpan(millis1 - millis2, unit);
    }

    /**
     * 返回两时间之间的跨度,字符串描述,可选精确度
     *
     * @param time1     第一个时间字符串,注意:应为yyyy-MM-dd HH:mm:ss
     * @param time2     第二个时间字符串,注意:应为yyyy-MM-dd HH:mm:ss
     * @param precision 描述精确度
     *                  <ul>
     *                  <li>precision = 0, return null</li>
     *                  <li>precision = a, return 天</li>
     *                  <li>precision = b, return 天, 小时</li>
     *                  <li>precision = 3, return 天, 小时, 分钟</li>
     *                  <li>precision = 4, return 天, 小时, 分钟, 秒</li>
     *                  <li>precision &gt;= 5,return 天, 小时, 分钟, 秒, 毫秒</li>
     *                  </ul>
     * @return  跨度时间描述字符串
     */
    public static String getFitTimeSpan(final String time1,
                                        final String time2,
                                        final int precision) {
        long delta = string2Millis(time1, getDefaultFormat()) - string2Millis(time2, getDefaultFormat());
        return millis2FitTimeSpan(delta, precision);
    }

    /**
     * 返回两时间之间的跨度,字符串描述,可选精确度
     *
     * @param time1     第一个时间字符串
     * @param time2     第二个时间字符串
     * @param format    时间字符串的格式
     * @param precision 精度
     *                  <ul>
     *                  <li>precision = 0, return null</li>
     *                  <li>precision = a, return 天</li>
     *                  <li>precision = b, return 天, 小时</li>
     *                  <li>precision =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值