package com.hpw.mvpframe.utils;
import android.text.TextUtils;
import android.text.format.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* 日期时间工具类
*/
public class DateUtils {
public static final long ONE_SECOND_MILLIONS = 1000;
public static final long ONE_MINUTE_MILLIONS = 60 * ONE_SECOND_MILLIONS;
public static final long ONE_HOUR_MILLIONS = 60 * ONE_MINUTE_MILLIONS;
public static final long ONE_DAY_MILLIONS = 24 * ONE_HOUR_MILLIONS;
public static final int DAY_OF_YEAR = 365;
// 日期格式为 2016-02-03 17:04:58
public static final String PATTERN_DATE = "yyyy年MM月dd日";
public static final String PATTERN_TIME = "HH:mm:ss";
public static final String PATTERN_SPLIT = " ";
public static final String PATTERN = PATTERN_DATE + PATTERN_SPLIT + PATTERN_TIME;
public static String getShortTime(String dateStr) {
String str;
Date date = str2date(dateStr);
Date curDate = new Date();
long durTime = curDate.getTime() - date.getTime();
int dayDiff = calculateDayDiff(date, curDate);
if (durTime <= 10 * ONE_MINUTE_MILLIONS) {
str = "刚刚";
} else if (durTime < ONE_HOUR_MILLIONS) {
str = durTime / ONE_MINUTE_MILLIONS + "分钟前";
} else if (dayDiff == 0) {
str = durTime / ONE_HOUR_MILLIONS + "小时前";
} else if (dayDiff == -1) {
str = "昨天" + DateFormat.format("HH:mm", date);
} else if (isSameYear(date, curDate) && dayDiff < -1) {
str = DateFormat.format("MM-dd", date).toString();
} else {
str = DateFormat.format("yyyy-MM", date).toString();
}
return str;
}
/**
* 获取日期 PATTERN_DATE 部分
*/
public static String getDate(String date) {
if (TextUtils.isEmpty(date) || !date.contains(PATTERN_SPLIT)) {
return "";
}
return date.split(PATTERN_SPLIT)[0];
}
/**
* 原有日期上累加月
*
* @return 累加后的日期 PATTERN_DATE 部分
*/
public static String addMonth(String date, int moonCount) {
//如果date为空 就用当前时间
if (TextUtils.isEmpty(date)) {
SimpleDateFormat df = new SimpleDateFormat(PATTERN_DATE + PATTERN_SPLIT + PATTERN_TIME);
date = df.format(new Date());
}
Calendar calendar = str2calendar(date);
calendar.add(Calendar.MONTH, moonCount);
return getDate(calendar2str(calendar));
}
/**
* 计算天数差
*/
public static int calculateDayDiff(Date targetTime, Date compareTime) {
boolean sameYear = isSameYear(targetTime, compareTime);
if (sameYear) {
return calculateDayDiffOfSameYear(targetTime, compareTime);
} else {
int dayDiff = 0;
// 累计年数差的整年天数
int yearDiff = calculateYearDiff(targetTime, compareTime);
dayDiff += yearDiff * DAY_OF_YEAR;
// 累计同一年内的天数
dayDiff += calculateDayDiffOfSameYear(targetTime, compareTime);
return dayDiff;
}
}
/**
* 计算同一年内的天数差
*/
public static int calculateDayDiffOfSameYear(Date targetTime, Date compareTime) {
if (targetTime == null || compareTime == null) {
return 0;
}
Calendar tarCalendar = Calendar.getInstance();
tarCalendar.setTime(targetTime);
int tarDayOfYear = tarCalendar.get(Calendar.DAY_OF_YEAR);
Calendar compareCalendar = Calendar.getInstance();
compareCalendar.setTime(compareTime);
int comDayOfYear = compareCalendar.get(Calendar.DAY_OF_YEAR);
return tarDayOfYear - comDayOfYear;
}
/**
* 计算年数差
*/
public static int calculateYearDiff(Date targetTime, Date compareTime) {
if (targetTime == null || compareTime == null) {
return 0;
}
Calendar tarCalendar = Calendar.getInstance();
tarCalendar.setTime(targetTime);
int tarYear = tarCalendar.get(Calendar.YEAR);
Calendar compareCalendar = Calendar.getInstance();
compareCalendar.setTime(compareTime);
int comYear = compareCalendar.get(Calendar.YEAR);
return tarYear - comYear;
}
/**
* 计算月数差
*
* @param targetTime
* @param compareTime
* @return
*/
public static int calculateMonthDiff(String targetTime, String compareTime) {
return calculateMonthDiff(str2date(targetTime, PATTERN_DATE),
str2date(compareTime, PATTERN_DATE));
}
/**
* 计算月数差
*
* @param targetTime
* @param compareTime
* @return
*/
public static int calculateMonthDiff(Date targetTime, Date compareTime) {
Calendar tarCalendar = Calendar.getInstance();
tarCalendar.setTime(targetTime);
int tarYear = tarCalendar.get(Calendar.YEAR);
int tarMonth = tarCalendar.get(Calendar.MONTH);
Calendar compareCalendar = Calendar.getInstance();
compareCalendar.setTime(compareTime);
int comYear = compareCalendar.get(Calendar.YEAR);
int comMonth = compareCalendar.get(Calendar.MONTH);
return ((tarYear - comYear) * 12 + tarMonth - comMonth);
}
/**
* 是否为同一年
*/
public static boolean isSameYear(Date targetTime, Date compareTime) {
if (targetTime == null || compareTime == null) {
return false;
}
Calendar tarCalendar = Calendar.getInstance();
tarCalendar.setTime(targetTime);
int tarYear = tarCalendar.get(Calendar.YEAR);
Calendar compareCalendar = Calendar.getInstance();
compareCalendar.setTime(compareTime);
int comYear = compareCalendar.get(Calendar.YEAR);
return tarYear == comYear;
}
public static Date str2date(String str, String format) {
Date date = null;
try {
if (str != null) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
date = sdf.parse(str);
}
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static Date str2date(String str) {
return str2date(str, PATTERN);
}
public static String date2str(Date date) {
return date2str(date, PATTERN);
}
public static String date2str(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
return sdf.format(date);
}
public static Calendar str2calendar(String str) {
Calendar calendar = null;
Date date = str2date(str);
if (date != null) {
calendar = Calendar.getInstance();
calendar.setTime(date);
}
return calendar;
}
public static Calendar str2calendar(String str, String format) {
Calendar calendar = null;
Date date = str2date(str, format);
if (date != null) {
calendar = Calendar.getInstance();
calendar.setTime(date);
}
return calendar;
}
public static String calendar2str(Calendar calendar) {
return date2str(calendar.getTime());
}
public static String calendar2str(Calendar calendar, String format) {
return date2str(calendar.getTime(), format);
}
}