本人写时间类的时候,发现网上大多数方法都有一个bug,容易出现时间上的不准确,比如年月日转换的时候,闰年润月转换的时候。后本人重新写了一个方法,修改了这个bug。现帖上代码。转载的请署上我名字,注明转载原网址
package com.android.common.tools;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* Created by PBM on 2015/9/9.
*/
public class DateUtils {
private static final String DATE_FORMAT = "yyyy-M-d H:m:s";
private static SimpleDateFormat DATE_FORMAT_TILL_MINUTE = new SimpleDateFormat(
"m分ss秒");
private static SimpleDateFormat DATE_FORMAT_TILL_HOUR = new SimpleDateFormat(
"H时m分");
private static SimpleDateFormat DATE_FORMAT_TILL_DAY = new SimpleDateFormat(
"d日 H时m分");
private static SimpleDateFormat DATE_FORMAT_TILL_MONTH_DAY = new SimpleDateFormat(
"M月d日");
private static SimpleDateFormat DATE_FORMAT_TILL_MONTH = new SimpleDateFormat(
"yyyy年M月");
private static SimpleDateFormat DATE_FORMAT_TILL_YEAR_DAY = new SimpleDateFormat(
"yyyy-M-d");
private static SimpleDateFormat DATE_FORMAT_TILL_LONG = new SimpleDateFormat(
"yyyy-M-d H:m:s");
private static SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
//获得当前秒的时间
private static long getSecondTime(){
Calendar secondStart = Calendar.getInstance();
secondStart.add(Calendar.SECOND, -1);
String secondStr = sdf.format(secondStart.getTime());
Date secondDate = null;
try {
secondDate = sdf.parse(secondStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long secondTime = secondDate.getTime();
return secondTime;
}
//获取当前时间前5分钟的时间
private static long getMinute5Time(){
Calendar minute5Start = Calendar.getInstance();
Date nowDate = new Date();
minute5Start.setTime(nowDate);
minute5Start.add(Calendar.MINUTE, -5);
String minute5Str = sdf.format(minute5Start.getTime());
Date minute5Date = null;
try {
minute5Date = sdf.parse(minute5Str);
} catch (ParseException e) {
e.printStackTrace();
}
long minute5Time = minute5Date.getTime();
return minute5Time;
}
//获取小时的开始时间
private static long getHourStartTime(){
Calendar hourStart = Calendar.getInstance();
hourStart.set(hourStart.get(Calendar.YEAR), hourStart.get(Calendar.MONTH), hourStart.get(Calendar.DAY_OF_MONTH),hourStart.get(Calendar.HOUR_OF_DAY), 0, 0);
String hourStr = DATE_FORMAT_TILL_LONG.format(hourStart.getTime());
Date hourDate = null;
try {
hourDate = sdf.parse(hourStr);
} catch (ParseException e) {
e.printStackTrace();
}
long hourTime = hourDate.getTime();
return hourTime;
}
//获取当天的开始时间
private static long getTodayStartTime(){
Calendar todayStart = Calendar.getInstance();
todayStart.set(todayStart.get(Calendar.YEAR), todayStart.get(Calendar.MONTH), todayStart.get(Calendar.DAY_OF_MONTH),0, 0, 0);
String todayStr = DATE_FORMAT_TILL_LONG.format(todayStart.getTime());
Date todayDate = null;
try {
todayDate = sdf.parse(todayStr);
} catch (ParseException e) {
e.printStackTrace();
}
long todayTime = todayDate.getTime();
return todayTime;
}
//获取当月的开始时间
private static long getMonthStartTime(){
Calendar monthStart = Calendar.getInstance();
// monthStart.set(Calendar.DAY_OF_MONTH, 1);
monthStart.set(monthStart.get(Calendar.YEAR), monthStart.get(Calendar.MONTH), 1,0,0,0);
String monthStr = DATE_FORMAT_TILL_LONG.format(monthStart.getTime());
Date monthDate = null;
try {
monthDate = sdf.parse(monthStr);
} catch (ParseException e) {
e.printStackTrace();
}
long monthTime = monthDate.getTime();
return monthTime;
}
//获取当年的开始时间
private static long getYearStartTime(){
Calendar yearStart = Calendar.getInstance();
yearStart.set(yearStart.get(Calendar.YEAR), 0, 1,0,0,0);
String yearStr = DATE_FORMAT_TILL_LONG.format(yearStart.getTime());
Date yearDate = null;
try {
yearDate = sdf.parse(yearStr);
} catch (ParseException e) {
e.printStackTrace();
}
long yearTime = yearDate.getTime();
return yearTime;
}
public static String timeLogic(String timeStr) throws ParseException{
// 创建 Calendar 对象
Calendar calendar = Calendar.getInstance();
// 初始化 Calendar 对象,但并不必要,除非需要重置时间
Date nowDate = new Date();
calendar.setTime(nowDate);
Date timeDate = sdf.parse(timeStr);
long thatTime = timeDate.getTime();
if(Tools.isEmpty(timeStr)){
return "";
}
if(thatTime < getYearStartTime()){
return DATE_FORMAT_TILL_YEAR_DAY.format(timeDate);
}else if(thatTime < getMonthStartTime()){
//
return DATE_FORMAT_TILL_MONTH_DAY.format(timeDate);
}else if(thatTime < getTodayStartTime()){
//
return DATE_FORMAT_TILL_DAY.format(timeDate);
}else if(thatTime < getHourStartTime()){
//
return DATE_FORMAT_TILL_HOUR.format(timeDate);
}
else if(thatTime < getMinute5Time()){
//
return DATE_FORMAT_TILL_HOUR.format(timeDate);
}else if(thatTime < getSecondTime()){
//说明是5分钟内
return "刚刚";
}
else{
return "";
}
}
}