/*
GNU GENERAL LICENSE
Copyright (C) 2006 The Lobo Project. Copyright (C) 2014 - 2017 Lobo Evolution
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
verion 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General License for more details.
You should have received a copy of the GNU General Public
along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact info: lobochief@users.sourceforge.net; ivan.difrancesco@yahoo.it
*/
package org.lobobrowser.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
public final class DateUtil {
/**
* Validate the actual date of the given date string based on the given date format pattern and
* return a date instance based on the given date string.
* @param dateString The date string.
* @param dateFormat The date format pattern which should respect the SimpleDateFormat rules.
* @return The parsed date object.
* @throws ParseException If the given date string or its actual date is invalid based on the
* given date format pattern.
* @see SimpleDateFormat
*/
private Date parse(String dateString, String dateFormat, Locale loc) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat,loc);
simpleDateFormat.setLenient(false); // Don't automatically convert invalid date.
return simpleDateFormat.parse(dateString);
}
/**
* Determine SimpleDateFormat pattern matching with the given date string. Returns null if
* format is unknown. You can simply extend DateUtil with more formats if needed.
* @param dateString The date string to determine the SimpleDateFormat pattern for.
* @return The matching SimpleDateFormat pattern, or null if format is unknown.
* @see SimpleDateFormat
*/
public Date determineDateFormat(String dateString, Locale loc) {
ArrayList<String> DATE_FORMAT = formatList();
for (String regexp : DATE_FORMAT) {
try {
return parse(dateString, regexp,loc);
} catch (ParseException e) {}
}
return null; // Unknown format.
}
private ArrayList<String> formatList(){
ArrayList<String> DATE_FORMAT = new ArrayList<String>();
DATE_FORMAT.add("yyyyMMdd");
DATE_FORMAT.add("dd-MM-yyyy");
DATE_FORMAT.add("yyyy-MM-dd");
DATE_FORMAT.add("MM-dd-yyyy");
DATE_FORMAT.add("MM/dd/yyyy");
DATE_FORMAT.add("yyyy/MM/dd");
DATE_FORMAT.add("dd MMM yyyy");
DATE_FORMAT.add("dd MMMM yyyy");
DATE_FORMAT.add("dd-MMM-yy");
DATE_FORMAT.add("dd-MMM-yy");
DATE_FORMAT.add("yy-MMM-dd");
DATE_FORMAT.add("yy-MMM-dd");
DATE_FORMAT.add("yyyyMMddHHmm");
DATE_FORMAT.add("yyyyMMdd HHmm");
DATE_FORMAT.add("dd-MM-yyyy HHmm");
DATE_FORMAT.add("yyyy-MM-dd HHmm");
DATE_FORMAT.add("MM/dd/yyyy HHmm");
DATE_FORMAT.add("yyyy/MM/dd HHmm");
DATE_FORMAT.add("dd MMM yyyy HHmm");
DATE_FORMAT.add("dd MMMM yyyy HHmm");
DATE_FORMAT.add("yyyyMMddHHmmss");
DATE_FORMAT.add("yyyyMMdd HHmmss");
DATE_FORMAT.add("dd-MM-yyyy HHmmss");
DATE_FORMAT.add("yyyy-MM-dd HHmmss");
DATE_FORMAT.add("MM/dd/yyyy HHmmss");
DATE_FORMAT.add("yyyy/MM/dd HHmmss");
DATE_FORMAT.add("dd MMM yyyy HHmmss");
DATE_FORMAT.add("dd MMMM yyyy HHmmss");
DATE_FORMAT.add("yyyy. MM. dd");
DATE_FORMAT.add("yyyy-MM-dd'T'HHmmss'Z'");
DATE_FORMAT.add("dd MMM yyyy HHmmss");
DATE_FORMAT.add("dd-MMM-yyyy HHmmss Z");
DATE_FORMAT.add("EEE MMM dd yyyy");
DATE_FORMAT.add("EEE dd'th' MMM yyyy");
DATE_FORMAT.add("EEE dd'st' MMM yyyy");
DATE_FORMAT.add("EEE dd'nd' MMM yyyy");
DATE_FORMAT.add("EEE dd'rd' MMM yyyy");
DATE_FORMAT.add("EEEMMM ddyyyy");
DATE_FORMAT.add("EEEdd MMM yyyy HHmmss Z");
DATE_FORMAT.add("EEE, dd MMM yyyy HH:mm:ss Z");
DATE_FORMAT.add("EEE MMM dd HHmmss Z yyyy");
DATE_FORMAT.add("yyyy-MM-dd HHmmss Z");
DATE_FORMAT.add("yyyy-MM-dd HHmmss.S");
return DATE_FORMAT;
}
}