时间相关→TimeUtils

   
  import android.annotation.SuppressLint;
   
  import com.blankj.utilcode.constant.TimeConstants;
   
  import java.text.ParseException;
  import java.text.SimpleDateFormat;
  import java.util.Calendar;
  import java.util.Date;
  import java.util.Locale;
   
  /**
  *
  * author: Blankj
  * blog : http://blankj.com
  * time : 2016/8/2
  * desc : 时间相关工具类
  *
  */
  public final class TimeUtils {
   
  private TimeUtils() {
  throw new UnsupportedOperationException("u can't instantiate me...");
  }
   
  /**
  *

在工具类中经常使用到工具类的格式化描述,这个主要是一个日期的操作类,所以日志格式主要使用 SimpleDateFormat的定义格式.

  * 格式的意义如下: 日期和时间模式
  *

日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z'

  * 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。"''"
  * 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在分析时与输入字符串进行匹配。
  *

  * 定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):
  *
  * presentation, and examples.">
  *
  * 字母
  * 日期或时间元素
  * 表示
  * 示例
  *
  *
  * G
  * Era 标志符
  * Text
  * AD
  *
  *
  * y
  *
  * Year
  * 1996; 96
  *
  *
  * M
  * 年中的月份
  * Month
  * July; Jul; 07
  *
  *
  * w
  * 年中的周数
  * Number
  * 27
  *
  *
  * W
  * 月份中的周数
  * Number
  * 2
  *
  *
  * D
  * 年中的天数
  * Number
  * 189
  *
  *
  * d
  * 月份中的天数
  * Number
  * 10
  *
  *
  * F
  * 月份中的星期
  * Number
  * 2
  *
  *
  * E
  * 星期中的天数
  * Text
  * Tuesday; Tue
  *
  *
  * a
  * Am/pm 标记
  * Text
  * PM
  *
  *
  * H
  * 一天中的小时数(0-23)
  * Number
  * 0
  *
  *
  * k
  * 一天中的小时数(1-24)
  * Number
  * 24
  *
  *
  * K
  * am/pm 中的小时数(0-11)
  * Number
  * 0
  *
  *
  * h
  * am/pm 中的小时数(1-12)
  * Number
  * 12
  *
  *
  * m
  * 小时中的分钟数
  * Number
  * 30
  *
  *
  * s
  * 分钟中的秒数
  * Number
  * 55
  *
  *
  * S
  * 毫秒数
  * Number
  * 978
  *
  *
  * z
  * 时区
  * General time zone
  * Pacific Standard Time; PST; GMT-08:00
  *
  *
  * Z
  * 时区
  * RFC 822 time zone
  * -0800
  *
  *
  *
  * HH:mm 15:44
  * h:mm a 3:44 下午
  * HH:mm z 15:44 CST
  * HH:mm Z 15:44 +0800
  * HH:mm zzzz 15:44 中国标准时间
  * HH:mm:ss 15:44:40
  * yyyy-MM-dd 2016-08-12
  * yyyy-MM-dd HH:mm 2016-08-12 15:44
  * yyyy-MM-dd HH:mm:ss 2016-08-12 15:44:40
  * yyyy-MM-dd HH:mm:ss zzzz 2016-08-12 15:44:40 中国标准时间
  * EEEE yyyy-MM-dd HH:mm:ss zzzz 星期五 2016-08-12 15:44:40 中国标准时间
  * yyyy-MM-dd HH:mm:ss.SSSZ 2016-08-12 15:44:40.461+0800
  * yyyy-MM-dd'T'HH:mm:ss.SSSZ 2016-08-12T15:44:40.461+0800
  * yyyy.MM.dd G 'at' HH:mm:ss z 2016.08.12 公元 at 15:44:40 CST
  * K:mm a 3:44 下午
  * EEE, MMM d, ''yy 星期五, 八月 12, '16
  * hh 'o''clock' a, zzzz 03 o'clock 下午, 中国标准时间
  * yyyyy.MMMMM.dd GGG hh:mm aaa 02016.八月.12 公元 03:44 下午
  * EEE, d MMM yyyy HH:mm:ss Z 星期五, 12 八月 2016 15:44:40 +0800
  * yyMMddHHmmssZ 160812154440+0800
  * yyyy-MM-dd'T'HH:mm:ss.SSSZ 2016-08-12T15:44:40.461+0800
  * EEEE 'DATE('yyyy-MM-dd')' 'TIME('HH:mm:ss')' zzzz 星期五 DATE(2016-08-12) TIME(15:44:40) 中国标准时间
  *
  * 注意:SimpleDateFormat不是线程安全的,线程安全需用{@code ThreadLocal}
  */
  public static final String DEFAULT_PATTERN= "yyyy-MM-dd HH:mm:ss";
   
  /**
  * 将时间戳转为时间字符串
  *

格式为yyyy-MM-dd HH:mm:ss

  *
  * @param millis 毫秒时间戳
  * @return 时间字符串
  */
  public static String millis2String(long millis) {
  return new SimpleDateFormat(DEFAULT_PATTERN,Locale.getDefault()).format(newDate(millis));
  }
   
  /**
  * 将时间戳转为时间字符串
  *

格式为pattern

  *
  * @param millis 毫秒时间戳
  * @param pattern 时间格式
  * @return 时间字符串
  */
  public static String millis2String(long millis, String pattern) {
  return new SimpleDateFormat(pattern,Locale.getDefault()).format(newDate(millis));
  }
   
  /**
  * 将时间字符串转为时间戳
  *

time格式为yyyy-MM-dd HH:mm:ss

  *
  * @param time 时间字符串
  * @return 毫秒时间戳
  */
  public static long string2Millis(Stringtime) {
  return string2Millis(time,DEFAULT_PATTERN);
  }
   
  /**
  * 将时间字符串转为时间戳
  *

time格式为pattern

  *
  * @param time 时间字符串
  * @param pattern 时间格式
  * @return 毫秒时间戳
  */
  public static long string2Millis(Stringtime, String pattern) {
  try {
  return new SimpleDateFormat(pattern,Locale.getDefault()).parse(time).getTime();
  } catch (ParseException e) {
  e.printStackTrace();
  }
  return -1;
  }
   
  /**
  * 将时间字符串转为Date类型
  *

time格式为yyyy-MM-dd HH:mm:ss

  *
  * @param time 时间字符串
  * @return Date类型
  */
  public static Date string2Date(Stringtime) {
  return string2Date(time, DEFAULT_PATTERN);
  }
   
  /**
  * 将时间字符串转为Date类型
  *

time格式为pattern

  *
  * @param time 时间字符串
  * @param pattern 时间格式
  * @return Date类型
  */
  public static Date string2Date(Stringtime, String pattern) {
  return new Date(string2Millis(time, pattern));
  }
   
  /**
  * 将Date类型转为时间字符串
  *

格式为yyyy-MM-dd HH:mm:ss

  *
  * @param date Date类型时间
  * @return 时间字符串
  */
  public static String date2String(Date date) {
  return date2String(date, DEFAULT_PATTERN);
  }
   
  /**
  * 将Date类型转为时间字符串
  *

格式为pattern

  *
  * @param date Date类型时间
  * @param pattern 时间格式
  * @return 时间字符串
  */
  public static String date2String(Date date, String pattern) {
  return new SimpleDateFormat(pattern,Locale.getDefault()).format(date);
  }
   
  /**
  * 将Date类型转为时间戳
  *
  * @param date Date类型时间
  * @return 毫秒时间戳
  */
  public static long date2Millis(Date date) {
  return date.getTime();
  }
   
  /**
  * 将时间戳转为Date类型
  *
  * @param millis 毫秒时间戳
  * @return Date类型时间
  */
  public static Date millis2Date(long millis) {
  return new Date(millis);
  }
   
  /**
  * 获取两个时间差(单位:unit)
  *

time0和time1格式都为yyyy-MM-dd HH:mm:ss

  *
  * @param time0 时间字符串0
  * @param time1 时间字符串1
  * @param unit 单位类型
  *
      *
  • {@link TimeConstants#MSEC}: 毫秒
  •   *
  • {@link TimeConstants#SEC }: 秒
  •   *
  • {@link TimeConstants#MIN }: 分
  •   *
  • {@link TimeConstants#HOUR}: 小时
  •   *
  • {@link TimeConstants#DAY }: 天
  •   *
      * @return unit时间戳
      */
      public static long getTimeSpan(Stringtime0, String time1, @TimeConstants.Unitint unit) {
      return getTimeSpan(time0, time1, unit,DEFAULT_PATTERN);
      }
       
      /**
      * 获取两个时间差(单位:unit)
      *

    time0和time1格式都为format

      *
      * @param time0 时间字符串0
      * @param time1 时间字符串1
      * @param unit 单位类型
      *
        *
    • {@link TimeConstants#MSEC}: 毫秒
    •   *
    • {@link TimeConstants#SEC }: 秒
    •   *
    • {@link TimeConstants#MIN }: 分
    •   *
    • {@link TimeConstants#HOUR}: 小时
    •   *
    • {@link TimeConstants#DAY }: 天
    •   *
        * @param pattern 时间格式
        * @return unit时间戳
        */
        public static long getTimeSpan(Stringtime0, String time1, @TimeConstants.Unitint unit, String pattern) {
        return ConvertUtils.millis2TimeSpan(Math.abs(string2Millis(time0, pattern)- string2Millis(time1, pattern)), unit);
        }
         
        /**
        * 获取两个时间差(单位:unit)
        *
        * @param date0 Date类型时间0
        * @param date1 Date类型时间1
        * @param unit 单位类型
        *
          *
      • {@link TimeConstants#MSEC}: 毫秒
      •   *
      • {@link TimeConstants#SEC }: 秒
      •   *
      • {@link TimeConstants#MIN }: 分
      •   *
      • {@link TimeConstants#HOUR}: 小时
      •   *
      • {@link TimeConstants#DAY }: 天
      •   *
          * @return unit时间戳
          */
          public static long getTimeSpan(Date date0, Date date1, @TimeConstants.Unitint unit) {
          return ConvertUtils.millis2TimeSpan(Math.abs(date2Millis(date0)- date2Millis(date1)), unit);
          }
           
          /**
          * 获取两个时间差(单位:unit)
          *
          * @param millis0 毫秒时间戳0
          * @param millis1 毫秒时间戳1
          * @param unit 单位类型
          *
            *
        • {@link TimeConstants#MSEC}: 毫秒
        •   *
        • {@link TimeConstants#SEC }: 秒
        •   *
        • {@link TimeConstants#MIN }: 分
        •   *
        • {@link TimeConstants#HOUR}: 小时
        •   *
        • {@link TimeConstants#DAY }: 天
        •   *
            * @return unit时间戳
            */
            public static long getTimeSpan(long millis0, long millis1, @TimeConstants.Unitint unit) {
            return ConvertUtils.millis2TimeSpan(Math.abs(millis0- millis1), unit);
            }
             
            /**
            * 获取合适型两个时间差
            *

          time0和time1格式都为yyyy-MM-dd HH:mm:ss

            *
            * @param time0 时间字符串0
            * @param time1 时间字符串1
            * @param precision 精度
            *

          precision = 0,返回null

            *

          precision = 1,返回天

            *

          precision = 2,返回天和小时

            *

          precision = 3,返回天、小时和分钟

            *

          precision = 4,返回天、小时、分钟和秒

            *

          precision >= 5,返回天、小时、分钟、秒和毫秒

            * @return 合适型两个时间差
            */
            public static String getFitTimeSpan(Stringtime0, String time1, int precision) {
            return ConvertUtils.millis2FitTimeSpan(Math.abs(string2Millis(time0,DEFAULT_PATTERN) - string2Millis(time1, DEFAULT_PATTERN)), precision);
            }
             
            /**
            * 获取合适型两个时间差
            *

          time0和time1格式都为pattern

            *
            * @param time0 时间字符串0
            * @param time1 时间字符串1
            * @param precision 精度
            *

          precision = 0,返回null

            *

          precision = 1,返回天

            *

          precision = 2,返回天和小时

            *

          precision = 3,返回天、小时和分钟

            *

          precision = 4,返回天、小时、分钟和秒

            *

          precision >= 5,返回天、小时、分钟、秒和毫秒

            * @param pattern 时间格式
            * @return 合适型两个时间差
            */
            public static String getFitTimeSpan(Stringtime0, String time1, int precision, String pattern) {
            return ConvertUtils.millis2FitTimeSpan(Math.abs(string2Millis(time0, pattern)- string2Millis(time1, pattern)), precision);
            }
             
            /**
            * 获取合适型两个时间差
            *
            * @param date0 Date类型时间0
            * @param date1 Date类型时间1
            * @param precision 精度
            *

          precision = 0,返回null

            *

          precision = 1,返回天

            *

          precision = 2,返回天和小时

            *

          precision = 3,返回天、小时和分钟

            *

          precision = 4,返回天、小时、分钟和秒

            *

          precision >= 5,返回天、小时、分钟、秒和毫秒

            * @return 合适型两个时间差
            */
            public static String getFitTimeSpan(Datedate0, Date date1, int precision) {
            return ConvertUtils.millis2FitTimeSpan(Math.abs(date2Millis(date0)- date2Millis(date1)), precision);
            }
             
            /**
            * 获取合适型两个时间差
            *
            * @param millis0 毫秒时间戳1
            * @param millis1 毫秒时间戳2
            * @param precision 精度
            *

          precision = 0,返回null

            *

          precision = 1,返回天

            *

          precision = 2,返回天和小时

            *

          precision = 3,返回天、小时和分钟

            *

          precision = 4,返回天、小时、分钟和秒

            *

          precision >= 5,返回天、小时、分钟、秒和毫秒

            * @return 合适型两个时间差
            */
            public static String getFitTimeSpan(longmillis0, long millis1, int precision) {
            return ConvertUtils.millis2FitTimeSpan(Math.abs(millis0- millis1), precision);
            }
             
            /**
            * 获取当前毫秒时间戳
            *
            * @return 毫秒时间戳
            */
            public static long getNowTimeMills() {
            return System.currentTimeMillis();
            }
             
            /**
            * 获取当前时间字符串
            *

          格式为yyyy-MM-dd HH:mm:ss

            *
            * @return 时间字符串
            */
            public static String getNowTimeString() {
            return millis2String(System.currentTimeMillis(),DEFAULT_PATTERN);
            }
             
            /**
            * 获取当前时间字符串
            *

          格式为pattern

            *
            * @param pattern 时间格式
            * @return 时间字符串
            */
            public static String getNowTimeString(Stringpattern) {
            return millis2String(System.currentTimeMillis(), pattern);
            }
             
            /**
            * 获取当前Date
            *
            * @return Date类型时间
            */
            public static Date getNowTimeDate() {
            return new Date();
            }
             
            /**
            * 获取与当前时间的差(单位:unit)
            *

          time格式为yyyy-MM-dd HH:mm:ss

            *
            * @param time 时间字符串
            * @param unit 单位类型
            *
              *
          • {@link TimeConstants#MSEC}: 毫秒
          •   *
          • {@link TimeConstants#SEC }: 秒
          •   *
          • {@link TimeConstants#MIN }: 分
          •   *
          • {@link TimeConstants#HOUR}: 小时
          •   *
          • {@link TimeConstants#DAY }: 天
          •   *
              * @return unit时间戳
              */
              public static long getTimeSpanByNow(Stringtime, @TimeConstants.Unitint unit) {
              return getTimeSpan(getNowTimeString(), time, unit,DEFAULT_PATTERN);
              }
               
              /**
              * 获取与当前时间的差(单位:unit)
              *

            time格式为pattern

              *
              * @param time 时间字符串
              * @param unit 单位类型
              *
                *
            • {@link TimeConstants#MSEC}: 毫秒
            •   *
            • {@link TimeConstants#SEC }: 秒
            •   *
            • {@link TimeConstants#MIN }: 分
            •   *
            • {@link TimeConstants#HOUR}: 小时
            •   *
            • {@link TimeConstants#DAY }: 天
            •   *
                * @param pattern 时间格式
                * @return unit时间戳
                */
                public static long getTimeSpanByNow(Stringtime, @TimeConstants.Unitint unit, String pattern) {
                return getTimeSpan(getNowTimeString(), time, unit, pattern);
                }
                 
                /**
                * 获取与当前时间的差(单位:unit)
                *
                * @param date Date类型时间
                * @param unit 单位类型
                *
                  *
              • {@link TimeConstants#MSEC}: 毫秒
              •   *
              • {@link TimeConstants#SEC }: 秒
              •   *
              • {@link TimeConstants#MIN }: 分
              •   *
              • {@link TimeConstants#HOUR}: 小时
              •   *
              • {@link TimeConstants#DAY }: 天
              •   *
                  * @return unit时间戳
                  */
                  public static long getTimeSpanByNow(Datedate, @TimeConstants.Unitint unit) {
                  return getTimeSpan(newDate(), date, unit);
                  }
                   
                  /**
                  * 获取与当前时间的差(单位:unit)
                  *
                  * @param millis 毫秒时间戳
                  * @param unit 单位类型
                  *
                    *
                • {@link TimeConstants#MSEC}: 毫秒
                •   *
                • {@link TimeConstants#SEC }: 秒
                •   *
                • {@link TimeConstants#MIN }: 分
                •   *
                • {@link TimeConstants#HOUR}: 小时
                •   *
                • {@link TimeConstants#DAY }: 天
                •   *
                    * @return unit时间戳
                    */
                    public static long getTimeSpanByNow(longmillis, @TimeConstants.Unitint unit) {
                    return getTimeSpan(System.currentTimeMillis(), millis, unit);
                    }
                     
                    /**
                    * 获取合适型与当前时间的差
                    *

                  time格式为yyyy-MM-dd HH:mm:ss

                    *
                    * @param time 时间字符串
                    * @param precision 精度
                    *
                      *
                  • precision = 0,返回null
                  •   *
                  • precision = 1,返回天
                  •   *
                  • precision = 2,返回天和小时
                  •   *
                  • precision = 3,返回天、小时和分钟
                  •   *
                  • precision = 4,返回天、小时、分钟和秒
                  •   *
                  • precision >= 5,返回天、小时、分钟、秒和毫秒
                  •   *
                      * @return 合适型与当前时间的差
                      */
                      public static String getFitTimeSpanByNow(Stringtime, int precision) {
                      return getFitTimeSpan(getNowTimeString(), time, precision,DEFAULT_PATTERN);
                      }
                       
                      /**
                      * 获取合适型与当前时间的差
                      *

                    time格式为pattern

                      *
                      * @param time 时间字符串
                      * @param precision 精度
                      * @param pattern 时间格式
                      *
                        *
                    • precision = 0,返回null
                    •   *
                    • precision = 1,返回天
                    •   *
                    • precision = 2,返回天和小时
                    •   *
                    • precision = 3,返回天、小时和分钟
                    •   *
                    • precision = 4,返回天、小时、分钟和秒
                    •   *
                    • precision >= 5,返回天、小时、分钟、秒和毫秒
                    •   *
                        * @return 合适型与当前时间的差
                        */
                        public static String getFitTimeSpanByNow(Stringtime, int precision, String pattern) {
                        return getFitTimeSpan(getNowTimeString(), time, precision, pattern);
                        }
                         
                        /**
                        * 获取合适型与当前时间的差
                        *
                        * @param date Date类型时间
                        * @param precision 精度
                        *
                          *
                      • precision = 0,返回null
                      •   *
                      • precision = 1,返回天
                      •   *
                      • precision = 2,返回天和小时
                      •   *
                      • precision = 3,返回天、小时和分钟
                      •   *
                      • precision = 4,返回天、小时、分钟和秒
                      •   *
                      • precision >= 5,返回天、小时、分钟、秒和毫秒
                      •   *
                          * @return 合适型与当前时间的差
                          */
                          public static String getFitTimeSpanByNow(Datedate, int precision) {
                          return getFitTimeSpan(getNowTimeDate(), date, precision);
                          }
                           
                          /**
                          * 获取合适型与当前时间的差
                          *
                          * @param millis 毫秒时间戳
                          * @param precision 精度
                          *
                            *
                        • precision = 0,返回null
                        •   *
                        • precision = 1,返回天
                        •   *
                        • precision = 2,返回天和小时
                        •   *
                        • precision = 3,返回天、小时和分钟
                        •   *
                        • precision = 4,返回天、小时、分钟和秒
                        •   *
                        • precision >= 5,返回天、小时、分钟、秒和毫秒
                        •   *
                            * @return 合适型与当前时间的差
                            */
                            public static String getFitTimeSpanByNow(longmillis, int precision) {
                            return getFitTimeSpan(System.currentTimeMillis(), millis, precision);
                            }
                             
                            /**
                            * 获取友好型与当前时间的差
                            *

                          time格式为yyyy-MM-dd HH:mm:ss

                            *
                            * @param time 时间字符串
                            * @return 友好型与当前时间的差
                            *
                              *
                          • 如果小于1秒钟内,显示刚刚
                          •   *
                          • 如果在1分钟内,显示XXX秒前
                          •   *
                          • 如果在1小时内,显示XXX分钟前
                          •   *
                          • 如果在1小时外的今天内,显示今天15:32
                          •   *
                          • 如果是昨天的,显示昨天15:32
                          •   *
                          • 其余显示,2016-10-15
                          •   *
                          • 时间不合法的情况全部日期和时间信息,如星期六 十月 27 14:21:20 CST 2007
                          •   *
                              */
                              public static String getFriendlyTimeSpanByNow(Stringtime) {
                              return getFriendlyTimeSpanByNow(time,DEFAULT_PATTERN);
                              }
                               
                              /**
                              * 获取友好型与当前时间的差
                              *

                            time格式为pattern

                              *
                              * @param time 时间字符串
                              * @param pattern 时间格式
                              * @return 友好型与当前时间的差
                              *
                                *
                            • 如果小于1秒钟内,显示刚刚
                            •   *
                            • 如果在1分钟内,显示XXX秒前
                            •   *
                            • 如果在1小时内,显示XXX分钟前
                            •   *
                            • 如果在1小时外的今天内,显示今天15:32
                            •   *
                            • 如果是昨天的,显示昨天15:32
                            •   *
                            • 其余显示,2016-10-15
                            •   *
                            • 时间不合法的情况全部日期和时间信息,如星期六 十月 27 14:21:20 CST 2007
                            •   *
                                */
                                public static String getFriendlyTimeSpanByNow(Stringtime, String pattern) {
                                return getFriendlyTimeSpanByNow(string2Millis(time, pattern));
                                }
                                 
                                /**
                                * 获取友好型与当前时间的差
                                *
                                * @param date Date类型时间
                                * @return 友好型与当前时间的差
                                *
                                  *
                              • 如果小于1秒钟内,显示刚刚
                              •   *
                              • 如果在1分钟内,显示XXX秒前
                              •   *
                              • 如果在1小时内,显示XXX分钟前
                              •   *
                              • 如果在1小时外的今天内,显示今天15:32
                              •   *
                              • 如果是昨天的,显示昨天15:32
                              •   *
                              • 其余显示,2016-10-15
                              •   *
                              • 时间不合法的情况全部日期和时间信息,如星期六 十月 27 14:21:20 CST 2007
                              •   *
                                  */
                                  public static String getFriendlyTimeSpanByNow(Datedate) {
                                  return getFriendlyTimeSpanByNow(date.getTime());
                                  }
                                   
                                  /**
                                  * 获取友好型与当前时间的差
                                  *
                                  * @param millis 毫秒时间戳
                                  * @return 友好型与当前时间的差
                                  *
                                    *
                                • 如果小于1秒钟内,显示刚刚
                                •   *
                                • 如果在1分钟内,显示XXX秒前
                                •   *
                                • 如果在1小时内,显示XXX分钟前
                                •   *
                                • 如果在1小时外的今天内,显示今天15:32
                                •   *
                                • 如果是昨天的,显示昨天15:32
                                •   *
                                • 其余显示,2016-10-15
                                •   *
                                • 时间不合法的情况全部日期和时间信息,如星期六 十月 27 14:21:20 CST 2007
                                •   *
                                    */
                                    @SuppressLint("DefaultLocale")
                                    public static String getFriendlyTimeSpanByNow(longmillis) {
                                    long now = System.currentTimeMillis();
                                    long span = now - millis;
                                    if (span < 0)
                                    return String.format("%tc", millis);// U can read http://www.apihome.cn/api/java/Formatter.html to understand it.
                                    if (span < 1000) {
                                    return "刚刚";
                                    } else if (span < TimeConstants.MIN) {
                                    return String.format("%d秒前", span/ TimeConstants.SEC);
                                    } else if (span < TimeConstants.HOUR) {
                                    return String.format("%d分钟前", span/ TimeConstants.MIN);
                                    }
                                    // 获取当天00:00
                                    long wee = (now / TimeConstants.DAY)* TimeConstants.DAY- 8 * TimeConstants.HOUR;
                                    if (millis >= wee) {
                                    return String.format("今天%tR", millis);
                                    } else if (millis >= wee - TimeConstants.DAY) {
                                    return String.format("昨天%tR", millis);
                                    } else {
                                    return String.format("%tF", millis);
                                    }
                                    }
                                     
                                    /**
                                    * 判断是否同一天
                                    *

                                  time格式为yyyy-MM-dd HH:mm:ss

                                    *
                                    * @param time 时间字符串
                                    * @return {@code true}: 是
                                  {@code false}: 否
                                    */
                                    public static boolean isSameDay(String time) {
                                    return isSameDay(string2Millis(time,DEFAULT_PATTERN));
                                    }
                                     
                                    /**
                                    * 判断是否同一天
                                    *

                                  time格式为pattern

                                    *
                                    * @param time 时间字符串
                                    * @param pattern 时间格式
                                    * @return {@code true}: 是
                                  {@code false}: 否
                                    */
                                    public static boolean isSameDay(String time, String pattern) {
                                    return isSameDay(string2Millis(time, pattern));
                                    }
                                     
                                    /**
                                    * 判断是否同一天
                                    *
                                    * @param date Date类型时间
                                    * @return {@code true}: 是
                                  {@code false}: 否
                                    */
                                    public static boolean isSameDay(Date date) {
                                    return isSameDay(date.getTime());
                                    }
                                     
                                    /**
                                    * 判断是否同一天
                                    *
                                    * @param millis 毫秒时间戳
                                    * @return {@code true}: 是
                                  {@code false}: 否
                                    */
                                    public static boolean isSameDay(long millis) {
                                    long wee = (System.currentTimeMillis()/ TimeConstants.DAY)* TimeConstants.DAY- 8 * TimeConstants.HOUR;
                                    return millis >= wee && millis < wee + TimeConstants.DAY;
                                    }
                                     
                                    /**
                                    * 判断是否闰年
                                    *

                                  time格式为yyyy-MM-dd HH:mm:ss

                                    *
                                    * @param time 时间字符串
                                    * @return {@code true}: 闰年
                                  {@code false}: 平年
                                    */
                                    public static boolean isLeapYear(String time) {
                                    return isLeapYear(string2Date(time,DEFAULT_PATTERN));
                                    }
                                     
                                    /**
                                    * 判断是否闰年
                                    *

                                  time格式为pattern

                                    *
                                    * @param time 时间字符串
                                    * @param pattern 时间格式
                                    * @return {@code true}: 闰年
                                  {@code false}: 平年
                                    */
                                    public static boolean isLeapYear(String time, String pattern) {
                                    return isLeapYear(string2Date(time, pattern));
                                    }
                                     
                                    /**
                                    * 判断是否闰年
                                    *
                                    * @param date Date类型时间
                                    * @return {@code true}: 闰年
                                  {@code false}: 平年
                                    */
                                    public static boolean isLeapYear(Date date) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.setTime(date);
                                    int year = cal.get(Calendar.YEAR);
                                    return isLeapYear(year);
                                    }
                                     
                                    /**
                                    * 判断是否闰年
                                    *
                                    * @param millis 毫秒时间戳
                                    * @return {@code true}: 闰年
                                  {@code false}: 平年
                                    */
                                    public static boolean isLeapYear(long millis) {
                                    return isLeapYear(millis2Date(millis));
                                    }
                                     
                                    /**
                                    * 判断是否闰年
                                    *
                                    * @param year 年份
                                    * @return {@code true}: 闰年
                                  {@code false}: 平年
                                    */
                                    public static boolean isLeapYear(int year) {
                                    return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
                                    }
                                     
                                    /**
                                    * 获取星期
                                    *

                                  time格式为yyyy-MM-dd HH:mm:ss

                                    *
                                    * @param time 时间字符串
                                    * @return 星期
                                    */
                                    public static String getWeek(String time) {
                                    return getWeek(string2Date(time,DEFAULT_PATTERN));
                                    }
                                     
                                    /**
                                    * 获取星期
                                    *

                                  time格式为pattern

                                    *
                                    * @param time 时间字符串
                                    * @param pattern 时间格式
                                    * @return 星期
                                    */
                                    public static String getWeek(String time, String pattern) {
                                    return getWeek(string2Date(time, pattern));
                                    }
                                     
                                    /**
                                    * 获取星期
                                    *
                                    * @param date Date类型时间
                                    * @return 星期
                                    */
                                    public static String getWeek(Date date) {
                                    return new SimpleDateFormat("EEEE",Locale.getDefault()).format(date);
                                    }
                                     
                                    /**
                                    * 获取星期
                                    *
                                    * @param millis 毫秒时间戳
                                    * @return 星期
                                    */
                                    public static String getWeek(long millis) {
                                    return getWeek(newDate(millis));
                                    }
                                     
                                    /**
                                    * 获取星期
                                    *

                                  注意:周日的Index才是1,周六为7

                                    *

                                  time格式为yyyy-MM-dd HH:mm:ss

                                    *
                                    * @param time 时间字符串
                                    * @return 1...5
                                    */
                                    public static int getWeekIndex(Stringtime) {
                                    return getWeekIndex(string2Date(time,DEFAULT_PATTERN));
                                    }
                                     
                                    /**
                                    * 获取星期
                                    *

                                  注意:周日的Index才是1,周六为7

                                    *

                                  time格式为pattern

                                    *
                                    * @param time 时间字符串
                                    * @param pattern 时间格式
                                    * @return 1...7
                                    */
                                    public static int getWeekIndex(Stringtime, String pattern) {
                                    return getWeekIndex(string2Date(time, pattern));
                                    }
                                     
                                    /**
                                    * 获取星期
                                    *

                                  注意:周日的Index才是1,周六为7

                                    *
                                    * @param date Date类型时间
                                    * @return 1...7
                                    */
                                    public static int getWeekIndex(Date date) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.setTime(date);
                                    return cal.get(Calendar.DAY_OF_WEEK);
                                    }
                                     
                                    /**
                                    * 获取星期
                                    *

                                  注意:周日的Index才是1,周六为7

                                    *
                                    * @param millis 毫秒时间戳
                                    * @return 1...7
                                    */
                                    public static int getWeekIndex(long millis) {
                                    return getWeekIndex(millis2Date(millis));
                                    }
                                     
                                    /**
                                    * 获取月份中的第几周
                                    *

                                  注意:国外周日才是新的一周的开始

                                    *

                                  time格式为yyyy-MM-dd HH:mm:ss

                                    *
                                    * @param time 时间字符串
                                    * @return 1...5
                                    */
                                    public static int getWeekOfMonth(Stringtime) {
                                    return getWeekOfMonth(string2Date(time,DEFAULT_PATTERN));
                                    }
                                     
                                    /**
                                    * 获取月份中的第几周
                                    *

                                  注意:国外周日才是新的一周的开始

                                    *

                                  time格式为pattern

                                    *
                                    * @param time 时间字符串
                                    * @param pattern 时间格式
                                    * @return 1...5
                                    */
                                    public static int getWeekOfMonth(Stringtime, String pattern) {
                                    return getWeekOfMonth(string2Date(time, pattern));
                                    }
                                     
                                    /**
                                    * 获取月份中的第几周
                                    *

                                  注意:国外周日才是新的一周的开始

                                    *
                                    * @param date Date类型时间
                                    * @return 1...5
                                    */
                                    public static int getWeekOfMonth(Datedate) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.setTime(date);
                                    return cal.get(Calendar.WEEK_OF_MONTH);
                                    }
                                     
                                    /**
                                    * 获取月份中的第几周
                                    *

                                  注意:国外周日才是新的一周的开始

                                    *
                                    * @param millis 毫秒时间戳
                                    * @return 1...5
                                    */
                                    public static int getWeekOfMonth(longmillis) {
                                    return getWeekOfMonth(millis2Date(millis));
                                    }
                                     
                                    /**
                                    * 获取年份中的第几周
                                    *

                                  注意:国外周日才是新的一周的开始

                                    *

                                  time格式为yyyy-MM-dd HH:mm:ss

                                    *
                                    * @param time 时间字符串
                                    * @return 1...54
                                    */
                                    public static int getWeekOfYear(Stringtime) {
                                    return getWeekOfYear(string2Date(time,DEFAULT_PATTERN));
                                    }
                                     
                                    /**
                                    * 获取年份中的第几周
                                    *

                                  注意:国外周日才是新的一周的开始

                                    *

                                  time格式为pattern

                                    *
                                    * @param time 时间字符串
                                    * @param pattern 时间格式
                                    * @return 1...54
                                    */
                                    public static int getWeekOfYear(Stringtime, String pattern) {
                                    return getWeekOfYear(string2Date(time, pattern));
                                    }
                                     
                                    /**
                                    * 获取年份中的第几周
                                    *

                                  注意:国外周日才是新的一周的开始

                                    *
                                    * @param date Date类型时间
                                    * @return 1...54
                                    */
                                    public static int getWeekOfYear(Datedate) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.setTime(date);
                                    return cal.get(Calendar.WEEK_OF_YEAR);
                                    }
                                     
                                    /**
                                    * 获取年份中的第几周
                                    *

                                  注意:国外周日才是新的一周的开始

                                    *
                                    * @param millis 毫秒时间戳
                                    * @return 1...54
                                    */
                                    public static int getWeekOfYear(long millis) {
                                    return getWeekOfYear(millis2Date(millis));
                                    }
                                     
                                    private static final String[] CHINESE_ZODIAC= {"","","","","","","","","","","",""};
                                     
                                    /**
                                    * 获取生肖
                                    *

                                  time格式为yyyy-MM-dd HH:mm:ss

                                    *
                                    * @param time 时间字符串
                                    * @return 生肖
                                    */
                                    public static String getChineseZodiac(Stringtime) {
                                    return getChineseZodiac(string2Date(time,DEFAULT_PATTERN));
                                    }
                                     
                                    /**
                                    * 获取生肖
                                    *

                                  time格式为pattern

                                    *
                                    * @param time 时间字符串
                                    * @param pattern 时间格式
                                    * @return 生肖
                                    */
                                    public static String getChineseZodiac(Stringtime, String pattern) {
                                    return getChineseZodiac(string2Date(time, pattern));
                                    }
                                     
                                    /**
                                    * 获取生肖
                                    *
                                    * @param date Date类型时间
                                    * @return 生肖
                                    */
                                    public static String getChineseZodiac(Datedate) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.setTime(date);
                                    return CHINESE_ZODIAC[cal.get(Calendar.YEAR)% 12];
                                    }
                                     
                                    /**
                                    * 获取生肖
                                    *
                                    * @param millis 毫秒时间戳
                                    * @return 生肖
                                    */
                                    public static String getChineseZodiac(longmillis) {
                                    return getChineseZodiac(millis2Date(millis));
                                    }
                                     
                                    /**
                                    * 获取生肖
                                    *
                                    * @param year 年
                                    * @return 生肖
                                    */
                                    public static String getChineseZodiac(intyear) {
                                    return CHINESE_ZODIAC[year %12];
                                    }
                                     
                                    private static final String[] ZODIAC = {"水瓶座","双鱼座","白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","魔羯座"};
                                    private static final int[] ZODIAC_FLAGS= {20,19, 21, 21, 21, 22, 23, 23, 23, 24, 23, 22};
                                     
                                    /**
                                    * 获取星座
                                    *

                                  time格式为yyyy-MM-dd HH:mm:ss

                                    *
                                    * @param time 时间字符串
                                    * @return 生肖
                                    */
                                    public static String getZodiac(String time) {
                                    return getZodiac(string2Date(time,DEFAULT_PATTERN));
                                    }
                                     
                                    /**
                                    * 获取星座
                                    *

                                  time格式为pattern

                                    *
                                    * @param time 时间字符串
                                    * @param pattern 时间格式
                                    * @return 生肖
                                    */
                                    public static String getZodiac(String time, String pattern) {
                                    return getZodiac(string2Date(time, pattern));
                                    }
                                     
                                    /**
                                    * 获取星座
                                    *
                                    * @param date Date类型时间
                                    * @return 星座
                                    */
                                    public static String getZodiac(Date date) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.setTime(date);
                                    int month = cal.get(Calendar.MONTH)+ 1;
                                    int day = cal.get(Calendar.DAY_OF_MONTH);
                                    return getZodiac(month, day);
                                    }
                                     
                                    /**
                                    * 获取星座
                                    *
                                    * @param millis 毫秒时间戳
                                    * @return 星座
                                    */
                                    public static String getZodiac(long millis) {
                                    return getZodiac(millis2Date(millis));
                                    }
                                     
                                    /**
                                    * 获取星座
                                    *
                                    * @param month 月
                                    * @param day 日
                                    * @return 星座
                                    */
                                    public static String getZodiac(int month, int day) {
                                    return ZODIAC[day >= ZODIAC_FLAGS[month -1]
                                    ? month - 1
                                    : (month + 10) % 12];
                                    }
                                    }

                                  你可能感兴趣的:(工具类)