package com.cheng.utils;
import android.text.TextUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 日期工具类
*/
public final class DateUtil {
/**
* 日期类型
*/
public static final String yyyyMMDD = "yyyy-MM-dd";
public static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
public static final String HHmmss = "HH:mm:ss";
public static final String hhmmss = "HH:mm:ss";
public static final String LOCALE_DATE_FORMAT = "yyyy年M月d日 HH:mm:ss";
public static final String DB_DATA_FORMAT = "yyyy-MM-DD HH:mm:ss";
public static final String NEWS_ITEM_DATE_FORMAT = "hh:mm M月d日 yyyy";
public static String dateToString(Date date, String pattern)
throws Exception {
return new SimpleDateFormat(pattern).format(date);
}
public static Date stringToDate(String dateStr, String pattern)
throws Exception {
return new SimpleDateFormat(pattern).parse(dateStr);
}
/**
* 将Date类型转换为日期字符串
*
* @param date Date对象
* @param type 需要的日期格式
* @return 按照需求格式的日期字符串
*/
public static String formatDate(Date date, String type) {
try {
SimpleDateFormat df = new SimpleDateFormat(type);
return df.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将日期字符串转换为Date类型
*
* @param dateStr 日期字符串
* @param type 日期字符串格式
* @return Date对象
*/
public static Date parseDate(String dateStr, String type) {
SimpleDateFormat df = new SimpleDateFormat(type);
Date date = null;
try {
date = df.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 得到年
*
* @param date Date对象
* @return 年
*/
public static int getYear(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.YEAR);
}
/**
* 得到月
*
* @param date Date对象
* @return 月
*/
public static int getMonth(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.MONTH) + 1;
}
/**
* 得到日
*
* @param date Date对象
* @return 日
*/
public static int getDay(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.DAY_OF_MONTH);
}
/**
* 转换日期 将日期转为今天, 昨天, 前天, XXXX-XX-XX, ...
*
* @param time 时间
* @return 当前日期转换为更容易理解的方式
*/
public static String translateDate(Long time) {
long oneDay = 24 * 60 * 60 * 1000;
Calendar current = Calendar.getInstance();
Calendar today = Calendar.getInstance(); //今天
today.set(Calendar.YEAR, current.get(Calendar.YEAR));
today.set(Calendar.MONTH, current.get(Calendar.MONTH));
today.set(Calendar.DAY_OF_MONTH, current.get(Calendar.DAY_OF_MONTH));
// Calendar.HOUR——12小时制的小时数 Calendar.HOUR_OF_DAY——24小时制的小时数
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
long todayStartTime = today.getTimeInMillis();
if (time >= todayStartTime && time < todayStartTime + oneDay) { // today
return "今天";
} else if (time >= todayStartTime - oneDay && time < todayStartTime) { // yesterday
return "昨天";
} else if (time >= todayStartTime - oneDay * 2 && time < todayStartTime - oneDay) { // the day before yesterday
return "前天";
} else if (time > todayStartTime + oneDay) { // future
return "将来某一天";
} else {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date(time);
return dateFormat.format(date);
}
}
/**
* 转换日期 转换为更为人性化的时间
*
* @param time 时间
* @return
*/
private String translateDate(long time, long curTime) {
long oneDay = 24 * 60 * 60;
Calendar today = Calendar.getInstance(); //今天
today.setTimeInMillis(curTime * 1000);
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
long todayStartTime = today.getTimeInMillis() / 1000;
if (time >= todayStartTime) {
long d = curTime - time;
if (d <= 60) {
return "1分钟前";
} else if (d <= 60 * 60) {
long m = d / 60;
if (m <= 0) {
m = 1;
}
return m + "分钟前";
} else {
SimpleDateFormat dateFormat = new SimpleDateFormat("今天 HH:mm");
Date date = new Date(time * 1000);
String dateStr = dateFormat.format(date);
if (!TextUtils.isEmpty(dateStr) && dateStr.contains(" 0")) {
dateStr = dateStr.replace(" 0", " ");
}
return dateStr;
}
} else {
if (time < todayStartTime && time > todayStartTime - oneDay) {
SimpleDateFormat dateFormat = new SimpleDateFormat("昨天 HH:mm");
Date date = new Date(time * 1000);
String dateStr = dateFormat.format(date);
if (!TextUtils.isEmpty(dateStr) && dateStr.contains(" 0")) {
dateStr = dateStr.replace(" 0", " ");
}
return dateStr;
} else if (time < todayStartTime - oneDay && time > todayStartTime - 2 * oneDay){
SimpleDateFormat dateFormat = new SimpleDateFormat("前天 HH:mm");
Date date = new Date(time * 1000);
String dateStr = dateFormat.format(date);
if (!TextUtils.isEmpty(dateStr) && dateStr.contains(" 0")) {
dateStr = dateStr.replace(" 0", " ");
}
return dateStr;
} else {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = new Date(time * 1000);
String dateStr = dateFormat.format(date);
if (!TextUtils.isEmpty(dateStr) && dateStr.contains(" 0")) {
dateStr = dateStr.replace(" 0", " ");
}
return dateStr;
}
}
}
}