Android(安卓)时间对象操作工具类
16lz
2021-12-04
Android 时间对象操作工具类
开发过程中,用到的一些比较有用的时间处理方法封装。
import android.text.TextUtils;import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;/** * @author anothersunset * @create 2020/7/23 * @Describe 时间操作工具类 */public class DateFormatUtil {/** * 时间戳转日期 * * @param ms * @return */ public static String transForDateStr(Integer ms) { if (ms == null) { ms = 0; } if (ms == 0) { return ""; } long msl = (long) ms * 1000; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date temp = null; if (ms != null) { return sdf.format(msl); } return ""; } /** * 日期转时间戳 * * @param date * @return */ public static Integer transForMilliSecond(Date date) { if (date == null) return null; return (int) (date.getTime() / 1000); } /** * 获取当前时间戳 * * @return */ public static Integer currentTimeStamp() { return (int) (System.currentTimeMillis() / 1000); } /** * 日期字符串转时间戳 * * @param dateStr * @return */ public static Integer transForMilliSecond(String dateStr, String format) { if (TextUtils.isEmpty(dateStr)) { return 0; } Date date = DateFormatUtil.formatDate(dateStr, format); return date == null ? null : DateFormatUtil.transForMilliSecond(date); } /** * 时间戳格式化输出 * * @param ms 时间戳 * @param format 格式化 * @return */ public static String transForDate(Integer ms, String format) { String str = ""; if (ms != null) { long msl = (long) ms * 1000; SimpleDateFormat sdf = new SimpleDateFormat(format); if (!ms.equals(0)) { try { str = sdf.format(msl); } catch (Exception e) { e.printStackTrace(); } } } return str; } /** * 计算两个日期之间差的天数 * * @param ts1 时间戳1 * @param ts2 时间戳2 * @return */ public static int caculate2Days(Integer ts1, Integer ts2) { Date firstDate = DateFormatUtil.transForDate(ts1); Date secondDate = DateFormatUtil.transForDate(ts2); Calendar calendar = Calendar.getInstance(); calendar.setTime(firstDate); int dayNum1 = calendar.get(Calendar.DAY_OF_YEAR); calendar.setTime(secondDate); int dayNum2 = calendar.get(Calendar.DAY_OF_YEAR); return Math.abs(dayNum1 - dayNum2); } /** * 获取传入时间和当前时间的时间差 * * @return */ public static Long getTimediff(int timeStamp) { Date d1 = DateFormatUtil.transForDate(timeStamp); Date today = new Date(); if (d1.getTime() < today.getTime()) { return null; } return (d1.getTime() - today.getTime()) / 1000; } /** * 当前时间加一年 */ public static String addYear(int startTime) { Date firstDate = DateFormatUtil.transForDate(startTime); Calendar calendar = Calendar.getInstance(); calendar.setTime(firstDate); calendar.add(Calendar.YEAR, 1); String d1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); return d1; } /** * 计算当前时间差距 * * @param beginTime s * @return */ public static String caculateTime(int beginTime) { /// 时间戳转日期 /// 刚刚(1分钟内) /// x分钟前 (1小时内) /// x小时前 (1天内) /// 昨天 HH:mm /// 前天 HH:mm /// x天前 (本月内) /// MM-dd (本年内且非本月) /// yyyy-MM-dd (非本年) //秒数 // 异常数据 if (beginTime == 0) { return ""; } long now = currentTimeStamp(); long second = now - beginTime; long minute = second / 60; long hour = minute / 60; //今天0点 long zero = now - (now + 8 * 3600) % (60 * 60 * 24);//今天零点零分零秒的毫秒数 if (beginTime >= zero) { //当天 // 先判断是否 > 1h if (hour > 0) { return hour + "小时前"; } else { // 判断 > 1m if (minute > 0) { return minute + "分钟前"; } else { return "刚刚"; } } } else { long beginTimeL = beginTime; beginTimeL *= 1000L; //今天之前 //1.昨天之后 if (beginTime >= (zero - (3600 * 24))) { SimpleDateFormat format = new SimpleDateFormat("昨天 HH:mm"); return format.format(new Date(beginTimeL)); } else if (beginTime >= zero - (3600 * 48)) { //前天之后 SimpleDateFormat format = new SimpleDateFormat("前天 HH:mm"); return format.format(new Date(beginTimeL)); } else { //判断是否是本月 Calendar c = Calendar.getInstance(); //设置为1号,当前日期既为本月第一天 c.set(Calendar.DAY_OF_MONTH, 1); //将小时至0 c.set(Calendar.HOUR_OF_DAY, 0); //将分钟至0 c.set(Calendar.MINUTE, 0); //将秒至0 c.set(Calendar.SECOND, 0); //将毫秒至0 c.set(Calendar.MILLISECOND, 0); if (beginTimeL >= c.getTimeInMillis()) { //本月内// return (hour / 24 + (hour%24 == 0? 0 : 1)) + "天前"; return hour / 24 + "天前"; } else { //设置为1月1号 c.set(Calendar.MONTH, 1); //设置为1号,当前日期既为本月第一天 c.set(Calendar.DAY_OF_MONTH, 1); //将小时至0 c.set(Calendar.HOUR_OF_DAY, 0); //将分钟至0 c.set(Calendar.MINUTE, 0); //将秒至0 c.set(Calendar.SECOND, 0); //将毫秒至0 c.set(Calendar.MILLISECOND, 0); if (beginTimeL >= c.getTimeInMillis()) { //本年内 SimpleDateFormat format = new SimpleDateFormat("MM-dd"); return format.format(new Date(beginTimeL)); } else { //非本年 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); return format.format(new Date(beginTimeL)); } } } } } /** * 获取某一年下半年的开始时间 * * @return */ public static Integer getHalfYearStartTime(String year) { return transForMilliSecondByTim(year + "-07-01 00:00:00", "yyyy-MM-dd HH:mm:ss"); } /** * 某年某月的第一天 * * @param year * @param month * @return */ public static String getFisrtDayOfMonth(String year, String month) { Calendar cal = Calendar.getInstance(); //设置年份 cal.set(Calendar.YEAR, Integer.parseInt(year.replace("年", ""))); //设置月份 cal.set(Calendar.MONTH, Integer.parseInt(month.replace("月", "")) - 1); //获取某月最小天数 int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH); //设置日历中月份的最小天数 cal.set(Calendar.DAY_OF_MONTH, firstDay); //格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String firstDayOfMonth = sdf.format(cal.getTime()); return firstDayOfMonth + " 00:00:00"; } /** * 某年某月的最后一天 * * @param year * @param month * @return */ public static String getLastDayOfMonth(String year, String month) { Calendar cal = Calendar.getInstance(); //设置年份 cal.set(Calendar.YEAR, Integer.parseInt(year.replace("年", ""))); //设置月份 cal.set(Calendar.MONTH, Integer.parseInt(month.replace("月", "")) - 1); //获取某月最小天数 int firstDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //设置日历中月份的最小天数 cal.set(Calendar.DAY_OF_MONTH, firstDay); //格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String firstDayOfMonth = sdf.format(cal.getTime()); return firstDayOfMonth + " 23:59:59"; } /** * 计算两个时间差多少天 * * @param startTime * @param endTime * @param format * @return */ public static int calcTime(int startTime, int endTime, String format) { String str1 = transForDate(startTime, format); String str2 = transForDate(endTime, format); return differentDaysByMillisecond(DateFormatUtil.formatDate(str1, format), DateFormatUtil.formatDate(str2, format)); }}
更多相关文章
- 使Android原生时间选择器样式为滚轮
- (20120808)(01)android菜单与对话框--之日期及时间选择对话框
- Android日历行程
- Android中获取时间
- Android获取系统时间
- 我的2016,展望2017
- Android之日期及时间选择对话框
- Android自带Music播放器更新播放时间和进度条的方法
- android 自定义TextView实现秒级数字时钟