java中给定时间字符串,转换为距离现在几分钟,几天,几周前
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
publicclass DateUtils {
privatestatic final long ONE_MINUTE = 60;
privatestatic final long ONE_HOUR = 3600;
privatestatic final long ONE_DAY = 86400;
privatestatic final long ONE_MONTH = 2592000;
privatestatic final long ONE_YEAR = 31104000;
publicstatic Calendar calendar = Calendar.getInstance();
/**
*
* @return yyyy-mm-dd
* 2012-12-25
*/
publicstatic String getDate() {
returngetYear() + "-"+ getMonth() + "-"+ getDay();
}
/**
* @param format
* @return
* yyyy年MM月dd HH:mm
* MM-dd HH:mm 2012-12-25
*
*/
publicstatic String getDate(String format) {
SimpleDateFormat simple = newSimpleDateFormat(format);
returnsimple.format(calendar.getTime());
}
/**
*
* @return yyyy-MM-dd HH:mm
* 2012-12-29 23:47
*/
publicstatic String getDateAndMinute() {
SimpleDateFormat simple = newSimpleDateFormat("yyyy-MM-dd HH:mm");
returnsimple.format(calendar.getTime());
}
/**
*
* @return
* yyyy-MM-dd HH:mm:ss
* 2012-12-29 23:47:36
*/
publicstatic String getFullDate() {
SimpleDateFormat simple = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
returnsimple.format(calendar.getTime());
}
/**
* 距离今天多久
* @param date
* @return
*
*/
publicstatic String fromToday(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
longtime = date.getTime() / 1000;
longnow = newDate().getTime() / 1000;
longago = now - time;
if(ago <= ONE_HOUR)
returnago / ONE_MINUTE + "分钟前";
elseif (ago <= ONE_DAY)
returnago / ONE_HOUR + "小时"+ (ago % ONE_HOUR / ONE_MINUTE)
+"分钟前";
elseif (ago <= ONE_DAY * 2)
return"昨天" + calendar.get(Calendar.HOUR_OF_DAY) + "点"
+ calendar.get(Calendar.MINUTE) + "分";
elseif (ago <= ONE_DAY * 3)
return"前天" + calendar.get(Calendar.HOUR_OF_DAY) + "点"
+ calendar.get(Calendar.MINUTE) + "分";
elseif (ago <= ONE_MONTH) {
longday = ago / ONE_DAY;
returnday + "天前"+ calendar.get(Calendar.HOUR_OF_DAY) + "点"
+ calendar.get(Calendar.MINUTE) + "分";
}elseif (ago <= ONE_YEAR) {
longmonth = ago / ONE_MONTH;
longday = ago % ONE_MONTH / ONE_DAY;
returnmonth + "个月"+ day + "天前"
+ calendar.get(Calendar.HOUR_OF_DAY) + "点"
+ calendar.get(Calendar.MINUTE) + "分";
}else{
longyear = ago / ONE_YEAR;
intmonth = calendar.get(Calendar.MONTH) + 1;// JANUARY which is 0 so month+1
returnyear + "年前"+ month + "月"+ calendar.get(Calendar.DATE)
+"日";
}
}
/**
* 距离截止日期还有多长时间
*
* @param date
* @return
*/
publicstatic String fromDeadline(Date date) {
longdeadline = date.getTime() / 1000;
longnow = (newDate().getTime()) / 1000;
longremain = deadline - now;
if(remain <= ONE_HOUR)
return"只剩下" + remain / ONE_MINUTE + "分钟";
elseif (remain <= ONE_DAY)
return"只剩下" + remain / ONE_HOUR + "小时"
+ (remain % ONE_HOUR / ONE_MINUTE) + "分钟";
else{
longday = remain / ONE_DAY;
longhour = remain % ONE_DAY / ONE_HOUR;
longminute = remain % ONE_DAY % ONE_HOUR / ONE_MINUTE;
return"只剩下" + day + "天"+ hour + "小时"+ minute + "分钟";
}
}
/**
* 距离今天的绝对时间
*
* @param date
* @return
*/
publicstatic String toToday(Date date) {
longtime = date.getTime() / 1000;
longnow = (newDate().getTime()) / 1000;
longago = now - time;
if(ago <= ONE_HOUR)
returnago / ONE_MINUTE + "分钟";
elseif (ago <= ONE_DAY)
returnago / ONE_HOUR + "小时"+ (ago % ONE_HOUR / ONE_MINUTE) + "分钟";
elseif (ago <= ONE_DAY * 2)
return"昨天" + (ago - ONE_DAY) / ONE_HOUR + "点"+ (ago - ONE_DAY)
% ONE_HOUR / ONE_MINUTE + "分";
elseif (ago <= ONE_DAY * 3) {
longhour = ago - ONE_DAY * 2;
return"前天" + hour / ONE_HOUR + "点"+ hour % ONE_HOUR / ONE_MINUTE
+"分";
}elseif (ago <= ONE_MONTH) {
longday = ago / ONE_DAY;
longhour = ago % ONE_DAY / ONE_HOUR;
longminute = ago % ONE_DAY % ONE_HOUR / ONE_MINUTE;
returnday + "天前"+ hour + "点"+ minute + "分";
}elseif (ago <= ONE_YEAR) {
longmonth = ago / ONE_MONTH;
longday = ago % ONE_MONTH / ONE_DAY;
longhour = ago % ONE_MONTH % ONE_DAY / ONE_HOUR;
longminute = ago % ONE_MONTH % ONE_DAY % ONE_HOUR / ONE_MINUTE;
returnmonth + "个月"+ day + "天"+ hour + "点"+ minute + "分前";
}else{
longyear = ago / ONE_YEAR;
longmonth = ago % ONE_YEAR / ONE_MONTH;
longday = ago % ONE_YEAR % ONE_MONTH / ONE_DAY;
returnyear + "年前"+ month + "月"+ day + "天";
}
}
publicstatic String getYear() {
returncalendar.get(Calendar.YEAR) + "";
}
publicstatic String getMonth() {
intmonth = calendar.get(Calendar.MONTH) + 1;
returnmonth + "";
}
publicstatic String getDay() {
returncalendar.get(Calendar.DATE) + "";
}
publicstatic String get24Hour() {
returncalendar.get(Calendar.HOUR_OF_DAY) + "";
}
publicstatic String getMinute() {
returncalendar.get(Calendar.MINUTE) + "";
}
publicstatic String getSecond() {
returncalendar.get(Calendar.SECOND) + "";
}
publicstatic void main(String[] args) throwsParseException {
String deadline = "2012-12-30 12:45:59";
Date date = newDate();
SimpleDateFormat simple = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = simple.parse(deadline);
System.out.println(DateUtils.fromDeadline(date));
String before = "2012-12-12 0:0:59";
date = simple.parse(before);
System.out.println(DateUtils.fromToday(date));
System.out.println(DateUtils.getFullDate());
System.out.println(DateUtils.getDate());
}
}
实用的一个类:
<span style="font-size:24px;">
</span><span style="font-size:14px;">import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtils {
private static final long ONE_MINUTE = 60;
private static final long ONE_HOUR = 3600;
private static final long ONE_DAY = 86400;
private static final long ONE_MONTH = 2592000;
private static final long ONE_YEAR = 31104000;
public static Calendar calendar = Calendar.getInstance();
/**
*
* @param timestr
* @return 距离现在
*/
public static String fromToday(String timestr){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = null;
try {
date = df.parse(timestr);
} catch (ParseException e) {
e.printStackTrace();
return "未知时间";
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long time = date.getTime() / 1000;
long now = new Date().getTime() / 1000;
long ago = now - time;
if(ago <= ONE_HOUR){
return ago / ONE_MINUTE + "分钟前";
}
else if(ago <= ONE_DAY){
return ago / ONE_HOUR + "小时" + (ago % ONE_HOUR / ONE_MINUTE)+ "分钟前";
}
else if(ago <= ONE_DAY * 2){
return "昨天" + calendar.get(Calendar.HOUR_OF_DAY) + "点"+ calendar.get(Calendar.MINUTE) + "分";
}
else if (ago <= ONE_DAY * 3){
return "前天" + calendar.get(Calendar.HOUR_OF_DAY) + "点" + calendar.get(Calendar.MINUTE) + "分";
}
else if (ago <= ONE_MONTH){
long day = ago / ONE_DAY;
if(day < 7)
return day + "天前" ;
else if (day >= 7 && day <14)
return "1周前";
else if (day >=14 && day <21)
return "2周前";
else if (day >= 21 && day <28)
return "3周前";
else
return "4周前";
}
else if (ago <= ONE_YEAR){
long month = ago / ONE_MONTH;
long day = ago % ONE_MONTH / ONE_DAY;
return month + "个月" + day + "天前";
}
else {
long year = ago / ONE_YEAR;
int month = calendar.get(Calendar.MONTH) + 1;// JANUARY which is 0 so month+1
return year + "年前" + month + "月" + calendar.get(Calendar.DATE)
+ "日";
}
}
}
</span>