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