现在项目中服务端返回的日期都需要转换成不同的显示风格,这里就写个日期转换工具类。具体代码如下:
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class DateHelper {
/**
* 将时间字符串解析为 Date 类型,支持 ISO6801 格式
*
* @param s 时间字符串
* @return 日期时间,如解析失败则返回 1970-01-01 00:00:00 东八区时间
*/
public static Date fromString(String s) {
if (StringUtils.isEmpty(s))
return null;
final String[] patterns = new String[]{
"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss.SSS",
"yyyy-MM-dd'T'HH:mm:ss",
};
try {
// 将 UTC 格式的时间转换为 GMT 时区
s = StringUtils.removeEnd(s, "Z").concat("+00:00");
return DateUtils.parseDate(s, patterns);
} catch (ParseException e) {
// 处理带有微秒和不带微秒的 UTC 格式日期时间
SimpleDateFormat format;
if (s.contains(".")){
format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault());
}else {
format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault());
}
format.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
return format.parse(s.replace("(?<=\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3})\\d{4}Z", ""));
} catch (ParseException ex) {
ex.printStackTrace();
}
}
return null;
}
/**
* 默认的日期时间格式
*/
public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm";
/**
* 默认的日期格式
*/
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/**
* 按照默认格式显示日期
*
* @param date 日期
* @return 日期字符串
*/
public static String formatByDefault(Date date) {
if (date == null) return null;
SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATETIME_FORMAT, Locale.getDefault());
return format.format(date);
}
/**
* 只显示年月日
* @param date 日期
* @return
*/
public static String formatByDate(Date date){
if (date == null) return null;
SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_FORMAT, Locale.getDefault());
return format.format(date);
}
/**
* 获取便于阅读的日期文本,根据日期显示「昨天」、「今天」、「明天」和其他日期
*
* @param date 日期对象
* @return 日期文本
*/
public static String getHumanDateString(Date date) {
if(date == null) return null;
String result;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Calendar now = Calendar.getInstance();
Calendar yesterday = Calendar.getInstance();
yesterday.add(Calendar.DATE, -1);
Calendar tomorrow = Calendar.getInstance();
tomorrow.add(Calendar.DATE, 1);
// if(DateUtils.truncatedCompareTo(calendar, now, Calendar.DAY_OF_MONTH) == 0) {
// result = "今天";
// } else if(DateUtils.truncatedCompareTo(calendar, yesterday, Calendar.DAY_OF_MONTH) == 0) {
// result = "昨天";
// } else if(DateUtils.truncatedCompareTo(calendar, tomorrow, Calendar.DAY_OF_MONTH) == 0) {
// result = "明天";
// } else {
SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_FORMAT, Locale.getDefault());
result = format.format(date);
// }
return result;
}
}
这里需要用lang3这个库,要在build添加该库:
dependencies {
......
compile 'org.apache.commons:commons-lang3:3.4'
}