package com.metservice.kanban.utils; import org.apache.commons.lang.StringUtils; import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.DateTimeFormatterBuilder; import org.joda.time.format.ISODateTimeFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; //TODO This class needs unit tests. /** * Helper class for dates, specifically configured for New Zealand timezone. */ public class DateUtils { private static final Logger LOGGER = LoggerFactory.getLogger(DateUtils.class); public static final DateTimeZone NEW_ZEALAND_TIME = DateTimeZone.forID("Pacific/Auckland"); public static final DateTimeFormatter CONVENTIONAL_NEW_ZEALAND_DATE_FORMAT; public static final DateTimeFormatter ISO_FORMAT = ISODateTimeFormat.date(); public static final String DATE_FORMAT_STR = "yyyy-MM-dd"; static { CONVENTIONAL_NEW_ZEALAND_DATE_FORMAT = new DateTimeFormatterBuilder() .appendDayOfMonth(2) .appendLiteral('/') .appendMonthOfYear(2) .appendLiteral('/') .appendYear(4, 4) .toFormatter(); } private DateUtils() { } /**Returns a LocalDate parsed in conventional New Zealand (dd/mm/yy) format. * @param dateString * @return */ public static LocalDate parseConventionalNewZealandDate(String dateString) { return CONVENTIONAL_NEW_ZEALAND_DATE_FORMAT.parseDateTime(dateString).toLocalDate(); } /** * Returns a LocalDate parsed in the default ISO (yy/mm/dd) format. * @param dateString * @return */ public static LocalDate parseIsoDate(String dateString) { return ISO_FORMAT.parseDateTime(dateString).toLocalDate(); } /** * Converts from LocalDate format to New Zealand (dd/mm/yy) format. * @param date * @return */ public static String formatConventionalNewZealandDate(LocalDate date) { return date.toString(CONVENTIONAL_NEW_ZEALAND_DATE_FORMAT); } /** * Converts from LocalDate format to ISO (yy/mm/dd) format. * @param date * @return */ public static String formatIsoDate(LocalDate date) { return date.toString(ISO_FORMAT); } /** * Returns the LocalDate specifically in the New Zealand timezone. * @return */ public static LocalDate currentLocalDate() { return new LocalDate(NEW_ZEALAND_TIME); } public static LocalDate parseDate(String startDate, LocalDate defaultValue) { LocalDate start; try { if (StringUtils.isNotEmpty(startDate)) { start = LocalDate.parse(startDate); } else { start = defaultValue; } } catch (RuntimeException e) { LOGGER.warn("Cannot parse date {}", startDate); LOGGER.warn("Got exception: ", e); start = defaultValue; } return start; } }