DateHelper.java
package com.tradecloud.domain.helper;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.util.List;
public class DateHelper extends XmlAdapter<String, LocalDate> {
public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm");
public static final DateTimeFormatter PERIOD_FORMATTER = DateTimeFormat.forPattern("yyyy-MM");
public static final DateTimeFormatter MONTH_NAME_PERIOD_FORMATTER = DateTimeFormat.forPattern("MMMM yyyy");
public static final DateTimeFormatter MONTH_DAY_FORMATTER = DateTimeFormat.forPattern("MM-dd");
public static LocalDate parseDate(String jodaDateAsString) {
return DATE_FORMATTER.parseDateTime(jodaDateAsString).toLocalDate();
}
public static String parseDate(LocalDate date) {
return date.toString(DATE_FORMATTER);
}
public static String getNullSafeFormattedDate(LocalDate date, DateTimeFormatter formatter) {
StringBuilder builder = new StringBuilder();
builder.append((date == null) ? "" : date.toString(formatter));
return builder.toString();
}
public static LocalDate extractLocalDateOrNull(String dateString) {
if (!StringUtils.isBlank(dateString)) {
return parseDate(dateString);
}
return null;
}
public static LocalDateTime parseDateTime(String jodaDateAsString) {
if (jodaDateAsString.length() == 10) {
return DATE_FORMATTER.parseDateTime(jodaDateAsString).toLocalDateTime();
}
return DATE_TIME_FORMATTER.parseDateTime(jodaDateAsString).toLocalDateTime();
}
public static LocalDateTime extractLocalDateTimeOrNull(String dateTimeString) {
if (!StringUtils.isBlank(dateTimeString)) {
return parseDateTime(dateTimeString);
}
return null;
}
public static LocalDate latestDate(List<LocalDate> dates) {
LocalDate latestDate = dates.get(0);
for (LocalDate date : dates) {
if (date.isAfter(latestDate)) {
latestDate = date;
}
}
return latestDate;
}
@Override
public LocalDate unmarshal(String v) throws Exception {
return parseDate(v);
}
@Override
public String marshal(LocalDate v) throws Exception {
return parseDate(v);
}
}