今天在公众号中看到一篇关于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;
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();
* 返回近一年月份
*/
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;
}
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;
}
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;
}
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 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);
}
* 用户自定义的 年月日-时分秒格式,设置的默认要内部的
* @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 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);
}
* 获取格式 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);
}
* 获取格式 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;
}
* 将年月日的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 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);
}
* 格式化日期显示格式
* @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));
}
* 将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 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());
}
* 将"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));
}
* 将指定格式的时间字符串转成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;
}
* 将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();
}
* 将年月日的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);
}
* 求两个日期相差天数
*
* @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 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 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);
}
* 获得当月几号
* @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 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 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);
}
* 获得前天的日期(格式: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 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 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();
}
}
* 取得给定日期加上一定天数后的日期对象.
*
* @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);
String timeDate = DateUtil.changeTimeMillisToDatetimeString(TimeM);
结果为:12天3时13分34秒