• 时间处理工具类TimeUtil


    转自:https://cnblogs.com/ityouknow/p/5662753.html

    功能

    Date与String之间的互相转换,以及一些特殊格式的时间字符串处理

    代码

      1 /**
      2  * 类名:TimeUtil.java 类描述:时间处理工具
      3  *
      4  * @author wader 创建时间:2011-12-02 11:03
      5  */
      6 public class TimeUtil {
      7  public final static String FORMAT_DATE = "yyyy-MM-dd";
      8  public final static String FORMAT_TIME = "hh:mm";
      9  public final static String FORMAT_DATE_TIME = "yyyy-MM-dd hh:mm";
     10  public final static String FORMAT_MONTH_DAY_TIME = "MM月dd日 hh:mm";
     11  private static SimpleDateFormat sdf = new SimpleDateFormat();
     12  private static final int YEAR = 365 * 24 * 60 * 60;//
     13  private static final int MONTH = 30 * 24 * 60 * 60;//
     14  private static final int DAY = 24 * 60 * 60;//
     15  private static final int HOUR = 60 * 60;// 小时
     16  private static final int MINUTE = 60;// 分钟
     17 
     18  /**
     19   * 根据时间戳获取描述性时间,如3分钟前,1天前
     20   *
     21   * @param timestamp
     22   *            时间戳 单位为毫秒
     23   * @return 时间字符串
     24   */
     25  public static String getDescriptionTimeFromTimestamp(long timestamp) {
     26   long currentTime = System.currentTimeMillis();
     27   long timeGap = (currentTime - timestamp) / 1000;// 与现在时间相差秒数
     28   System.out.println("timeGap: " + timeGap);
     29   String timeStr = null;
     30   if (timeGap > YEAR) {
     31    timeStr = timeGap / YEAR + "年前";
     32   } else if (timeGap > MONTH) {
     33    timeStr = timeGap / MONTH + "个月前";
     34   } else if (timeGap > DAY) {// 1天以上
     35    timeStr = timeGap / DAY + "天前";
     36   } else if (timeGap > HOUR) {// 1小时-24小时
     37    timeStr = timeGap / HOUR + "小时前";
     38   } else if (timeGap > MINUTE) {// 1分钟-59分钟
     39    timeStr = timeGap / MINUTE + "分钟前";
     40   } else {// 1秒钟-59秒钟
     41    timeStr = "刚刚";
     42   }
     43   return timeStr;
     44  }
     45 
     46  /**
     47   * 根据时间戳获取指定格式的时间,如2011-11-30 08:40
     48   *
     49   * @param timestamp
     50   *            时间戳 单位为毫秒
     51   * @param format
     52   *            指定格式 如果为null或空串则使用默认格式"yyyy-MM-dd HH:MM"
     53   * @return
     54   */
     55  public static String getFormatTimeFromTimestamp(long timestamp,
     56    String format) {
     57   if (format == null || format.trim().equals("")) {
     58    sdf.applyPattern(FORMAT_DATE);
     59    int currentYear = Calendar.getInstance().get(Calendar.YEAR);
     60    int year = Integer.valueOf(sdf.format(new Date(timestamp))
     61      .substring(0, 4));
     62    System.out.println("currentYear: "+currentYear);
     63    System.out.println("year: "+year);
     64    if (currentYear == year) {//如果为今年则不显示年份
     65     sdf.applyPattern(FORMAT_MONTH_DAY_TIME);
     66    } else {
     67     sdf.applyPattern(FORMAT_DATE_TIME);
     68    }
     69   } else {
     70    sdf.applyPattern(format);
     71   }
     72   Date date = new Date(timestamp);
     73   return sdf.format(date);
     74  }
     75 
     76  /**
     77   * 根据时间戳获取时间字符串,并根据指定的时间分割数partionSeconds来自动判断返回描述性时间还是指定格式的时间
     78   *
     79   * @param timestamp
     80   *            时间戳 单位是毫秒
     81   * @param partionSeconds
     82   *            时间分割线,当现在时间与指定的时间戳的秒数差大于这个分割线时则返回指定格式时间,否则返回描述性时间
     83   * @param format
     84   * @return
     85   */
     86  public static String getMixTimeFromTimestamp(long timestamp,
     87    long partionSeconds, String format) {
     88   long currentTime = System.currentTimeMillis();
     89   long timeGap = (currentTime - timestamp) / 1000;// 与现在时间相差秒数
     90   if (timeGap <= partionSeconds) {
     91    return getDescriptionTimeFromTimestamp(timestamp);
     92   } else {
     93    return getFormatTimeFromTimestamp(timestamp, format);
     94   }
     95  }
     96 
     97  /**
     98   * 获取当前日期的指定格式的字符串
     99   *
    100   * @param format
    101   *            指定的日期时间格式,若为null或""则使用指定的格式"yyyy-MM-dd HH:MM"
    102   * @return
    103   */
    104  public static String getCurrentTime(String format) {
    105   if (format == null || format.trim().equals("")) {
    106    sdf.applyPattern(FORMAT_DATE_TIME);
    107   } else {
    108    sdf.applyPattern(format);
    109   }
    110   return sdf.format(new Date());
    111  }
    112 
    113  /**
    114   * 将日期字符串以指定格式转换为Date
    115   *
    116   * @param time
    117   *            日期字符串
    118   * @param format
    119   *            指定的日期格式,若为null或""则使用指定的格式"yyyy-MM-dd HH:MM"
    120   * @return
    121   */
    122  public static Date getTimeFromString(String timeStr, String format) {
    123   if (format == null || format.trim().equals("")) {
    124    sdf.applyPattern(FORMAT_DATE_TIME);
    125   } else {
    126    sdf.applyPattern(format);
    127   }
    128   try {
    129    return sdf.parse(timeStr);
    130   } catch (ParseException e) {
    131    return new Date();
    132   }
    133  }
    134 
    135  /**
    136   * 将Date以指定格式转换为日期时间字符串
    137   *
    138   * @param date
    139   *            日期
    140   * @param format
    141   *            指定的日期时间格式,若为null或""则使用指定的格式"yyyy-MM-dd HH:MM"
    142   * @return
    143   */
    144  public static String getStringFromTime(Date time, String format) {
    145   if (format == null || format.trim().equals("")) {
    146    sdf.applyPattern(FORMAT_DATE_TIME);
    147   } else {
    148    sdf.applyPattern(format);
    149   }
    150   return sdf.format(time);
    151  }
    152 }

    使用范例

     1 public class Test {
     2  public static void main(String[] args) {
     3   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
     4   String timeStr = "2010-11-30 10:12:23";
     5   try {
     6    Date date = sdf.parse(timeStr);
     7 
     8    System.out.println(TimeUtil.getDescriptionTimeFromTimestamp(date
     9      .getTime()));
    10    System.out.println(TimeUtil.getDescriptionTimeFromTimestamp(new Date()
    11      .getTime()));
    12    
    13    System.out.println(TimeUtil.getFormatTimeFromTimestamp(date.getTime(),
    14    "yyyy年MM月dd日"));
    15    System.out.println(TimeUtil.getFormatTimeFromTimestamp(date.getTime(),
    16      null));
    17    System.out.println(TimeUtil.getFormatTimeFromTimestamp(new Date().getTime(),
    18      null));
    19    
    20    System.out.println(TimeUtil.getMixTimeFromTimestamp(date.getTime(),
    21      3*24 * 60 * 60, "yyyy年MM月dd日 hh:mm"));
    22    System.out.println(TimeUtil.getMixTimeFromTimestamp(date.getTime(),
    23      24 * 60 * 60, null)); 
    24    System.out.println(TimeUtil.getMixTimeFromTimestamp(new Date().getTime(),
    25      3*24 * 60 * 60, "yyyy年MM月dd日 hh:mm"));
    26    
    27   } catch (ParseException e) {
    28    e.printStackTrace();
    29   }
    30 
    31  }
    32 }
    33 
    34 输出结果
    35 
    36 1年前
    37 刚刚
    38 2010年11月30日
    39 2010-11-30 10:12
    40 12月02日 01:21
    41 2010年11月30日 10:12
    42 2010-11-30 10:12
  • 相关阅读:
    SHA1加密算法 java
    CMD命令名详细大全
    springMVC get请求及其请求地址写法
    webService 接口调用配置
    使用jdk操作 wsdl2java (wedservice)
    编码问题(utf-8,gbk,utf-16be)
    9 个让 JavaScript 调试更简单的 Console 命令
    让姑姑不再划拳 码农也要有原则 : SOLID via C#
    工欲善其事,必先利其器 之 VS2013全攻略(安装,技巧,快捷键,插件)!
    2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>
  • 原文地址:https://www.cnblogs.com/sharpest/p/7788247.html
Copyright © 2020-2023  润新知