package com.gnod.geekr.tool;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DateUtils {
private static final int MIN_MILL = 60 * 1000;
private static final int HOUR_MILL = 60 * MIN_MILL;
private static final int DAY_MILL = 24 * HOUR_MILL;
private static final String JUST_NOW = "刚刚";
private static final String SEC_AGO = "秒前";
private static final String MIN_AGO = "分钟前";
private static final String TODAY = "今天";
private static final String YESTERDAY = "昨天";
private static final String DAY_FORMAT = "HH:mm";
private static final String DATE_FORMAT = "MM/dd HH:mm";
private static final String YEAR_FORMAT = "yyyy/MM/dd HH:mm";
private static SimpleDateFormat dayFormat;
private static SimpleDateFormat dateFormat;
private static SimpleDateFormat yearFormat;
private static Calendar calCalender;
/**
* Sina Weibo 日期格式为 EEE MMM d HH:mm:ss Z yyyy
*/
static SimpleDateFormat weiboSdf = new SimpleDateFormat("EEE MMM d HH:mm:ss Z yyyy", Locale.ENGLISH);
private static DateFormat datTagFormat;
/**
* 根据传入时间自动返回适合显示的对应时间字符串 <br>
* <60s 刚刚<br>
* <1h 分钟显示<br>
* <1d HH:mm显示<br>
* <2d 昨天<br>
* 当前同一年 MM/dd HH:mm<br>
* 其它 yyyy/MM/dd HH:mm <br>
*
*/
public static String getMagicTime(Date date) {
long mills = date.getTime();
long nowMills = System.currentTimeMillis();
Calendar nowCalendar = Calendar.getInstance();
if(calCalender == null)
calCalender = Calendar.getInstance();
calCalender.setTimeInMillis(mills);
long secElapse = (nowMills - mills) / 1000;
if(secElapse < 60)
return JUST_NOW;
long minElapse = secElapse / 60;
if(minElapse < 60)
return new StringBuilder().append(minElapse).append(MIN_AGO).toString();
long hourElapse = minElapse / 60;
if(hourElapse < 24 && isSameDay(calCalender, nowCalendar)) {
if(dayFormat == null)
dayFormat = new SimpleDateFormat(DAY_FORMAT);
String result = dayFormat.format(date);
return new StringBuilder().append(TODAY).append(" ").append(result).toString();
}
long dayElapse = hourElapse / 24;
if(dayElapse == 1) {
if(dayFormat == null)
dayFormat = new SimpleDateFormat(DAY_FORMAT);
String result = dayFormat.format(date);
return new StringBuilder().append(YESTERDAY).append(" ").append(result).toString();
}
if(isSameYear(calCalender, nowCalendar)){
if(dateFormat == null)
dateFormat = new SimpleDateFormat(DATE_FORMAT);
String result = dateFormat.format(date);
return new StringBuilder().append(result).toString();
}
if(yearFormat == null)
yearFormat = new SimpleDateFormat(YEAR_FORMAT);
String result = yearFormat.format(date);
return new StringBuilder().append(result).toString();
}
private static boolean isSameDay(Calendar calDay, Calendar now) {
return calDay.get(Calendar.DAY_OF_YEAR) == now.get(Calendar.DAY_OF_YEAR);
}
private static boolean isSameYear(Calendar calDay, Calendar now) {
return calDay.get(Calendar.YEAR) == now.get(Calendar.YEAR);
}
public static String getFullTime(Date date) {
if(yearFormat == null)
yearFormat = new SimpleDateFormat(YEAR_FORMAT);
String result = yearFormat.format(date);
return new StringBuilder().append(result).toString();
}
public static Date convertSinaWeiboDateStringToDate(String rawDate){
if(StringUtils.isNullOrEmpty(rawDate))
return new Date();
if(weiboSdf == null)
weiboSdf = new SimpleDateFormat("EEE MMM d HH:mm:ss Z yyyy", Locale.ENGLISH);
Date resultDate = null;
try {
resultDate = weiboSdf.parse(rawDate);
} catch (ParseException e) {
resultDate = new Date();
return resultDate;
}
return resultDate;
}
public static String getDateTag(Date date)
{
if(date == null)
return "";
if(datTagFormat == null)
datTagFormat = new SimpleDateFormat("yyyy_MMdd_HHmmss", Locale.ENGLISH);
return datTagFormat.format(date);
}
}