package com.jspxcms.common.util;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.joda.time.DateTime;
/**
* 日期工具类
*
* @author liufang
*
*/
public abstract class Dates {
public static Date parse(String s) {
return parse(s, false);
}
public static Date parseEndDate(String s) {
return parse(s, true);
}
public static Date parse(String s, boolean endDate) {
if (StringUtils.isBlank(s)) {
return null;
}
s = s.trim();
DateTime dt;
if (s.startsWith("now")) {
dt = DateTime.now();
String[] arr = StringUtils.split(s, ',');
int num;
boolean plus;
String[] opts;
for (int i = 1, len = arr.length; i < len; i++) {
plus = true;
opts = StringUtils.split(arr[i], '+');
if (opts.length != 2) {
plus = false;
opts = StringUtils.split(arr[i], '-');
}
if (opts.length != 2) {
continue;
}
num = NumberUtils.toInt(opts[1], 0);
if (!plus) {
num = -num;
}
if (opts[0].equalsIgnoreCase("year")) {
dt = dt.plusYears(num);
} else if (opts[0].equalsIgnoreCase("month")) {
dt = dt.plusMonths(num);
} else if (opts[0].equalsIgnoreCase("day")) {
dt = dt.plusDays(num);
} else if (opts[0].equalsIgnoreCase("hour")) {
dt = dt.plusHours(num);
} else if (opts[0].equalsIgnoreCase("minute")) {
dt = dt.plusMinutes(num);
} else if (opts[0].equalsIgnoreCase("second")) {
dt = dt.plusSeconds(num);
}
}
} else {
dt = DateTime.parse(s);
if (endDate && s.length() <= 10) {
dt = dt.plusDays(1);
dt = dt.minusMillis(1);
}
}
return dt.toDate();
}
}