Android工具类---日期时间工具类

前言

在任何APP开发中,日期和时间是无处不在的,例如QQ、微信,每条信息都会显示发送时间,还有空间、朋友圈每一条数据也都有时间,比较细腻的APP还会显示“今天”、“昨天”、“某年某月某人”。

格式化日期时间

作为Android程序员,大家都知道代码里面直接获取到的时间都是Long型的字符串,不处理的话很难看懂。当然java给提供了API去处理这个Long型的时间,代码如下:

        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(currentTime); 

解析字符串格式的日期时间

既然我们可以把Long型的时间转换成字符串形式的,那么我们就能够将字符串新式的日期转换成Long型的时间。想必大家也都知道具体代码,代码如下:

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date dateformatter.parse("2017-07-10 12:23:00"); } catch (ParseException e) { return null; } 

封装

日期时间的转换很明显就是一个工具性的东西,那么封装一个工具类势在必得,直接上代码:


public class TimeUtil {

   /** *一些时间格式 */ public final static String FORMAT_TIME = "HH:mm"; public final static String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm"; public final static String FORMAT_DATE_TIME_SECOND = "yyyy-MM-dd HH:mm:ss"; public final static String FORMAT_MONTH_DAY_TIME = "MM-dd HH:mm"; public final static String FORMAT_DATE = "yyyy-MM-dd"; public static String getFormatToday(String dateFormat) { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); return formatter.format(currentTime); } public static Date stringToDate(String dateStr, String dateFormat) { SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); try { return formatter.parse(dateStr); } catch (ParseException e) { return null; } } public static String dateToString(Date date, String dateFormat) { SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); return formatter.format(date); } /** *类似QQ/微信 聊天消息的时间 */ public static String getChatTime(boolean hasYear, long timesamp) { long clearTime = timesamp; String result; SimpleDateFormat sdf = new SimpleDateFormat("dd"); Date today = new Date(System.currentTimeMillis()); Date otherDay = new Date(clearTime); int temp = Integer.parseInt(sdf.format(today)) - Integer.parseInt(sdf.format(otherDay)); switch (temp) { case 0: result = "今天 " + getHourAndMin(clearTime); break; case 1: result = "昨天 " + getHourAndMin(clearTime); break; case 2: result = "前天 " + getHourAndMin(clearTime); break; default: result = getTime(hasYear,clearTime); break; } return result; } private static String getTime(boolean hasYear, long time) { String pattern=FORMAT_DATE_TIME; if(!hasYear){ pattern = FORMAT_MONTH_DAY_TIME; } SimpleDateFormat format = new SimpleDateFormat(pattern); return format.format(new Date(time)); } private static String getHourAndMin(long time) { SimpleDateFormat format = new SimpleDateFormat(FORMAT_TIME); return format.format(new Date(time)); } /** * 获取当前日期是星期几<br> * * @param date * @return 当前日期是星期几 */ public static String getWeekOfDate(Date date) { String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; Calendar cal = Calendar.getInstance(); cal.setTime(date); int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return weekDays[w]; } } 

代码比较简单,希望对大家有一定帮助,后续遇到新的需求再继续完善。当然,也希望小伙伴们给出建议。

补充

计算两个日期之间相差的 秒数/分钟数/天数

    /**
     * 判断某个日期与今天相差 x年x天
     * 如果大于1年,显示x年x天 。否则显示 x天
     * @param timeStamp
     * @return
     */
    public static String getOffsetYearAndDayByTimeStamp(long timeStamp) { String result; long currentTimeStamp = System.currentTimeMillis(); long targetTimestamp = timeStamp * 1000L; int days = (int) ((currentTimeStamp - targetTimestamp) / ONE_YEAr); if (days > 365) { //大于1年 Calendar calendar1 = Calendar.getInstance(); calendar1.setTimeInMillis(currentTimeStamp); Calendar calendar2 = Calendar.getInstance(); calendar2.setTimeInMillis(targetTimestamp); //先判断是否同年 int y1 = calendar1.get(Calendar.YEAR); int y2 = calendar2.get(Calendar.YEAR); int d1 = calendar1.get(Calendar.DAY_OF_YEAR); int d2 = calendar2.get(Calendar.DAY_OF_YEAR); result = (y1 - y2) + "年" + (d1 - d2); } else { //不满一年,直接返回天数 result = String.valueOf(days); } return result; } /** * 描述:计算两个日期所差的天数. * * @param date1 第一个时间的毫秒表示 * @param date2 第二个时间的毫秒表示 * @return int 所差的天数 */ public static int getOffsetDay(long date1, long date2) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTimeInMillis(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTimeInMillis(date2); //先判断是否同年 int y1 = calendar1.get(Calendar.YEAR); int y2 = calendar2.get(Calendar.YEAR); int d1 = calendar1.get(Calendar.DAY_OF_YEAR); int d2 = calendar2.get(Calendar.DAY_OF_YEAR); int maxDays = 0; int day = 0; if (y1 - y2 > 0) { maxDays = calendar2.getActualMaximum(Calendar.DAY_OF_YEAR); day = d1 - d2 + maxDays; } else if (y1 - y2 < 0) { maxDays = calendar1.getActualMaximum(Calendar.DAY_OF_YEAR); day = d1 - d2 - maxDays; } else { day = d1 - d2; } return day; } /** * 描述:计算两个日期所差的小时数. * * @param date1 第一个时间的毫秒表示 * @param date2 第二个时间的毫秒表示 * @return int 所差的小时数 */ public static int getOffsetHour(long date1, long date2) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTimeInMillis(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTimeInMillis(date2); int h1 = calendar1.get(Calendar.HOUR_OF_DAY); int h2 = calendar2.get(Calendar.HOUR_OF_DAY); int h = 0; int day = getOffsetDay(date1, date2); h = h1 - h2 + day * 24; return h; } /** * 描述:计算两个日期所差的分钟数. * * @param date1 第一个时间的毫秒表示 * @param date2 第二个时间的毫秒表示 * @return int 所差的分钟数 */ public static int getOffsetMinutes(long date1, long date2) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTimeInMillis(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTimeInMillis(date2); int m1 = calendar1.get(Calendar.MINUTE); int m2 = calendar2.get(Calendar.MINUTE); int h = getOffsetHour(date1, date2); int m = 0; m = m1 - m2 + h * 60; return m; } 

获取某些特殊的日期,比如获取本周的周几的日期,获取本月的第一天,获取本月的最后一天


    /**
     * 描述:获取本周的某一天.
     *
     * @param format        the format
     * @param calendarField the calendar field
     * @return String String类型日期时间
     */
    private static String getDayOfWeek(String format, int calendarField) { String strDate = null; try { Calendar c = new GregorianCalendar(); SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format); int week = c.get(Calendar.DAY_OF_WEEK); if (week == calendarField) { strDate = mSimpleDateFormat.format(c.getTime()); } else { int offectDay = calendarField - week; if (calendarField == Calendar.SUNDAY) { offectDay = 7 - Math.abs(offectDay); } c.add(Calendar.DATE, offectDay); strDate = mSimpleDateFormat.format(c.getTime()); } } catch (Exception e) { e.printStackTrace(); } return strDate; } /** * 获取当前日期是星期几 * * @param date * @return 当前日期是星期几 */ public static String getWeekOfDate(Date date) { String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; Calendar cal = Calendar.getInstance(); cal.setTime(date); int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return weekDays[w]; } /** * 描述:获取本月第一天. * * @param format the format * @return String String类型日期时间 */ public static String getFirstDayOfMonth(String format) { String strDate = null; try { Calendar c = new GregorianCalendar(); SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format); //当前月的第一天 c.set(GregorianCalendar.DAY_OF_MONTH, 1); strDate = mSimpleDateFormat.format(c.getTime()); } catch (Exception e) { e.printStackTrace(); } return strDate; } /** * 描述:获取本月最后一天. * * @param format the format * @return String String类型日期时间 */ public static String getLastDayOfMonth(String format) { String strDate = null; try { Calendar c = new GregorianCalendar(); SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format); // 当前月的最后一天 c.set(Calendar.DATE, 1); c.roll(Calendar.DATE, -1); strDate = mSimpleDateFormat.format(c.getTime()); } catch (Exception e) { e.printStackTrace(); } return strDate; } 

希望这些总结对大家有所帮助,如果有不正确的地方也可以提出来一起进步。 如果觉的还不错的话,就给个赞哈!



作者:chaohx
链接:https://www.jianshu.com/p/ffd5f3541f21
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自www.cnblogs.com/H-xiaofeng/p/9656040.html