时间日期工具类Util

今天在公众号中看到一篇关于Android时间日期的整理,然后觉得有一些是可取的,经过自己的一些调整、修改、增加和完善,决定放出来供大家参考,说好听点是为了节省不必要的开发时间和提高编码效率,难听点就是“可以偷懒”啦,无论如何,方便的东西才是好的,毕竟的确没有必要花费太多时间在这上面,下面粘贴代码,有不足之处请在评论说出,共同成长:

public class DateUtil {
final static long oneDayMillis = 24*60*60*1000;
 final static long oneHourMillis = 60*60*1000;
 final static long oneMinuteMillis = 60*1000;
 /**
  * 返回近一年月份
  */
 public static List<Date> getNearMonth(Date now) {
  List<Date> dates = new ArrayList<Date>();
  Calendar dd = Calendar.getInstance();// 定义日期实例
  dd.setTime(now);// 设置日期起始时间
  dd.add(Calendar.YEAR, -1);
  Date last = dd.getTime();
  dd.setTime(last);// 设置日期起始时间
  while (dd.getTime().before(now)) {// 判断是否到结束日期
   dates.add(dd.getTime());
   dd.add(Calendar.MONTH, 1);// 进行当前日期月份加1
  }
  dates.remove(0);
  dates.add(dd.getTime());
//  dd.add(Calendar.MONTH, 1);// 进行当前日期月份加1
  return dates;
 }

 /**
  * 两日期相差的时间毫秒,前者时间一定要小于后者时间
  */
 static SimpleDateFormat simpleDateFormatCompare = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
 public static long comparsionDate(Context context,String EarlierDate, String LaterDate){
  try {
   //TODO 稍后的时间
   Date dateLaterDate = simpleDateFormatCompare.parse(LaterDate);
   LogUtils.LogError("zheng",simpleDateFormatCompare.format(dateLaterDate));
   //TODO 稍前的时间
   Date dateEarlierDate = simpleDateFormatCompare.parse(EarlierDate);
   LogUtils.LogError("zheng",simpleDateFormatCompare.format(dateEarlierDate));
   Calendar calendar = Calendar.getInstance();
   calendar.setTime(dateLaterDate);
   long LaterDateTimeMillis = calendar.getTimeInMillis();  //稍后时间
   calendar.setTime(dateEarlierDate);
   long EarlierDateTimeMillis = calendar.getTimeInMillis(); //稍前时间
   long goneTimeMillis = LaterDateTimeMillis - EarlierDateTimeMillis; //已经走了的时间
   int compare = dateEarlierDate.compareTo(dateLaterDate);
   if(compare == 1){
    //前一个参数大于后一个参数
    CenterToast.ShortCenter(context,"前一个参数大于后一个参数!请重新比较");
    return 1;
   }else {
    //别的情况,满足比较条件
    return goneTimeMillis;
   }
  } catch (ParseException e) {
   e.printStackTrace();
  }
  return 0;
 }
 /**
  * 将时间毫秒变为天数时分秒
  * @param timeMillis timeMillis
  * @return
  */
 public static String changeTimeMillisToDatetimeString(long timeMillis){
  String s = "";
  int day = 0;
  int hour = 0;
  int minute = 0;
  int second = 0;
  //天
  if(timeMillis > oneDayMillis){
   day = (int) (timeMillis/oneDayMillis);
   timeMillis = timeMillis%oneDayMillis;
  }
  //时
  if(timeMillis > oneHourMillis){
   hour = (int) (timeMillis/oneHourMillis);
   timeMillis = timeMillis%oneHourMillis;
  }
  //分
  if(timeMillis > oneMinuteMillis){
   minute = (int) (timeMillis/oneMinuteMillis);
   timeMillis = timeMillis%oneMinuteMillis;
  }
  //秒
  second = (int) timeMillis/1000;
  s = day + "天" + hour + "时" + minute + "分"+ second +"秒";
  return s;
 }
 
 /**
  * 将long时间转成yyyy-MM-dd HH:mm:ss字符串<br>
  * @param timeInMillis 时间long值
  * @return yyyy-MM-dd HH:mm:ss
  */
 public static String getDateTimeFromMillis(long timeInMillis) {
  return getDateTimeFormat(new Date(timeInMillis));
 }
 /***
  * 用户自定义的 年月日-时分秒格式,设置的默认要内部的
  * @param simpleDateFormatString
  */
 static SimpleDateFormat simpleDateFormat;
 public void setSimpleDateFormat(String simpleDateFormatString){
  simpleDateFormat = new SimpleDateFormat(simpleDateFormatString, Locale.CHINA);
 }
 /**
  * 获取格式 yyyy-MM-dd HH:mm:ss
  * @return yyyy-MM-dd HH:mm:ss
  */
 private static SimpleDateFormat getSimpleDateFormatDateTime(){
  if(simpleDateFormat != null){
   return simpleDateFormat;
  }
  return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
 }
 /**
  * 获取格式 yyyy-MM-dd
  * @return yyyy-MM-dd
  */
 private static SimpleDateFormat getSimpleDateFormatDate(){
  return new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
 }
 /**
  * 获取格式 HH时mm分ss秒
  * @return HH:mm:ss
  */
 private static SimpleDateFormat getSimpleDateFormatTime(){
  return new SimpleDateFormat("HH时mm分ss秒", Locale.CHINA);
 }

 /**
  * 将date转成yyyy-MM-dd HH:mm:ss字符串
  * <br>
  * @param date Date对象
  * @return  yyyy-MM-dd HH:mm:ss
  */
 public static String getDateTimeFormat(Date date) {
  return dateSimpleFormat(date, getSimpleDateFormatDateTime());
 }
 /**
  * 将年月日的int转成yyyy-MM-dd的字符串
  * @param year 年
  * @param month 月 1-12
  * @param day 日
  * 注:月表示Calendar的月,比实际小1
  * 对输入项未做判断
  */
 public static String getDateFormat(int year, int month, int day) {
  Date date = getDate(year, month, day);
  String dateString = new SimpleDateFormat("yyyy-MM-dd",Locale.CHINA).format(date);
  return dateString;
 }
 /**
  * 格式化日期显示格式
  * @param sdate 原始日期格式 "yyyy-MM-dd"
  * @param format 格式化后日期格式
  * @return 格式化后的日期显示
  */
 public static String dateFormat(String sdate, String format) {
  SimpleDateFormat formatter = new SimpleDateFormat(format);
  java.sql.Date date = java.sql.Date.valueOf(sdate);
  return dateSimpleFormat(date, formatter);
 }
 /**
  * 格式化日期显示格式
  * @param date Date对象
  * @param format 格式化后日期格式
  * @return 格式化后的日期显示
  */
 public static String dateFormat(Date date, String format) {
  SimpleDateFormat formatter = new SimpleDateFormat(format);
  return dateSimpleFormat(date, formatter);
 }
 /**
  * 将date转成字符串
  * @param date Date
  * @param format SimpleDateFormat
  * <br>
  * 注: SimpleDateFormat为空时,采用默认的yyyy-MM-dd HH:mm:ss格式
  * @return yyyy-MM-dd HH:mm:ss
  */
 public static String dateSimpleFormat(Date date, SimpleDateFormat format) {
  if (format == null)
   format = getSimpleDateFormatDateTime();
  return (date == null ? "" : format.format(date));
 }
 /**
  * 将"yyyy-MM-dd HH:mm:ss" 格式的字符串转成Date
  * @param strDate 时间字符串
  * @return Date
  */
 public static Date getDateByDateTimeFormat(String strDate) {
  return getDateByFormat(strDate, getSimpleDateFormatDateTime());
 }
 /**
  * 将"yyyy-MM-dd" 格式的字符串转成Date
  * @param strDate
  * @return Date
  */
 public static Date getDateByDateFormat(String strDate) {
  return getDateByFormat(strDate, getSimpleDateFormatDate());
 }
 /**
  * 将指定格式的时间字符串转成Date对象
  * @param strDate 时间字符串
  * @param format 格式化字符串
  * @return Date
  */
 public static Date getDateByFormat(String strDate, String format) {
  return getDateByFormat(strDate, new SimpleDateFormat(format,Locale.CHINA));
 }
 /**
  * 将String字符串按照一定格式转成Date<br>
  * 注: SimpleDateFormat为空时,采用默认的yyyy-MM-dd HH:mm:ss格式
  * @param strDate 时间字符串
  * @param format SimpleDateFormat对象
  * @exception ParseException 日期格式转换出错
  */
 private static Date getDateByFormat(String strDate, SimpleDateFormat format) {
  if (format == null)
   format = getSimpleDateFormatDateTime();
  try {
   return format.parse(strDate);
  } catch (ParseException e) {
   e.printStackTrace();
  }        return null;
 }
 /**
  * 将年月日的int转成date
  * @param year 年
  * @param month 月 1-12
  * @param day 日
  * 注:月表示Calendar的月,比实际小1
  */
 public static Date getDate(int year, int month, int day) {
  Calendar mCalendar = Calendar.getInstance();
  mCalendar.set(year, month - 1, day);
  return mCalendar.getTime();
 }
 /**
  * 求两个日期相差天数
  *
  * @param strat 起始日期,格式yyyy-MM-dd
  * @param end 终止日期,格式yyyy-MM-dd
  * @return 两个日期相差天数
  */
 public static long comparsionIntervalDays(String strat, String end) {
  return ((java.sql.Date.valueOf(end)).getTime() - (java.sql.Date
    .valueOf(strat)).getTime()) / (3600 * 24 * 1000);
 }
 /**
  * 获得当前年份
  * @return year(int)
  */
 public static int getCurrentYear() {
  Calendar mCalendar = Calendar.getInstance();
  return mCalendar.get(Calendar.YEAR);
 }
 /**
  * 获得当前月份
  * @return month(int) 1-12
  */
 public static int getCurrentMonth() {
  Calendar mCalendar = Calendar.getInstance();
  return mCalendar.get(Calendar.MONTH) + 1;
 }
 /**
  * 获得当月几号
  * @return day(int)
  */
 public static int getDayOfMonth() {
  Calendar mCalendar = Calendar.getInstance();
  return mCalendar.get(Calendar.DAY_OF_MONTH);
 }
 /**
  * 获得今天的日期(格式:yyyy-MM-dd)
  * @return yyyy-MM-dd
  */
 public static String getTodayDate() {
  Calendar mCalendar = Calendar.getInstance();
  int year = mCalendar.get(Calendar.YEAR);
  int mouth = mCalendar.get(Calendar.MONTH)+1;
  int day = mCalendar.get(Calendar.DAY_OF_MONTH);
  return getDateFormat(year,mouth,day);
 }
 /**
  * 获得昨天的日期(格式:yyyy-MM-dd)
  * @return yyyy-MM-dd
  */
 public static String getYesterdayDate() {
  Calendar mCalendar = Calendar.getInstance();
  mCalendar.add(Calendar.DATE, -1);
  int year = mCalendar.get(Calendar.YEAR);
  int mouth = mCalendar.get(Calendar.MONTH)+1;
  int day = mCalendar.get(Calendar.DAY_OF_MONTH);
  return getDateFormat(year,mouth,day);
 }
 /**
  * 获得前天的日期(格式:yyyy-MM-dd)
  * @return yyyy-MM-dd
  */
 public static String getBeforeYesterdayDate() {
  Calendar mCalendar = Calendar.getInstance();
  mCalendar.add(Calendar.DATE, -2);
  int year = mCalendar.get(Calendar.YEAR);
  int mouth = mCalendar.get(Calendar.MONTH)+1;
  int day = mCalendar.get(Calendar.DAY_OF_MONTH);
  return getDateFormat(year,mouth,day);
 }
 /**
  * 获得几天之前或者几天之后的日期
  * @param diff 差值:正的往后推,负的往前推
  * @return
  */
 public static String getOtherDayDate(int diff) {
  Calendar mCalendar = Calendar.getInstance();
  mCalendar.add(Calendar.DATE, diff);
  int year = mCalendar.get(Calendar.YEAR);
  int mouth = mCalendar.get(Calendar.MONTH)+1;
  int day = mCalendar.get(Calendar.DAY_OF_MONTH);
  return getDateFormat(year,mouth,day);
 }
 /**
  * 取得给定日期加上一定天数后的日期对象.
  *
  * @param //date 给定的日期对象
  * @param amount 需要添加的天数,如果是向前的天数,使用负数就可以.
  * @return Date 加上一定天数以后的Date对象.
  */
 public static String getCalcDateFormat(String sDate, int amount) {
  Date date = getCalcDate(getDateByDateFormat(sDate), amount);
  return getDateFormat(date.getYear(),date.getMonth(),date.getDay());
 }
 /**
  * 取得给定日期加上一定天数后的日期对象.
  *
  * @param date 给定的日期对象
  * @param amount 需要添加的天数,如果是向前的天数,使用负数就可以.
  * @return Date 加上一定天数以后的Date对象.
  */
 public static Date getCalcDate(Date date, int amount) {
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  cal.add(Calendar.DATE, amount);
  return cal.getTime();
 }
}

最后说一下comparsionDate()方法和changeTimeMillisToDatetimeString(long timeMillis)方法
这两个结合着使用能判断出两个日期隔了的时间,用法为:
long TimeM = DateUtil.comparsionDate(MainActivity.this,"2017-12-30 12:00:00","2018-01-11 15:13:34");
String timeDate = DateUtil.changeTimeMillisToDatetimeString(TimeM);

结果为:12天3时13分34秒


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值