您的位置:首页 > 其它

[置顶] 时间日期工具类Util

2018-01-11 17:20 330 查看
今天在公众号中看到一篇关于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秒
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: