Therapyx
@Therapyx
Data Science

Как определить автоматически формат Даты/Времени?

Задача состоит в том, что есть огромные текстовые документы, которые надо считывать и проводить вычисления времени.
Если там всегда 1 константный формат, то после добавления листа или где-то подобному - это бы выглядело следующим образом:
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
ArrayList<String> obj = new ArrayList<String>();
		obj.add("06.03.2016 09:00:00");
		obj.add("06.03.2016 17:45:00");
		obj.add("06.03.2016 23:51:12");
		obj.add("07.03.2016 00:55:33");

И дальше уже можно делать все нужные вычисления. Но вот проблема в том, что формат может быть не 1. И точно не известный/или же в будущем новый(дабы это не пришлось переделывать).

И вот сам вопрос: Существуют ли такие методы? Искал на стэке, ничего увы не нашел, вопросов куча - решений нет.
p.s. библиотеки типа pojava к сожалению не подходят, точнее "может быть", надо потом смотреть на лицензии... :)

Если же нет, то вопрос номер 2)
К примеру формат возмем уже приведенный dd.MM.yyyy HH:mm:ss. Я пишу функцию, которая должна определить в ручную
String format = "06.03.2016 09:00:00";
format = DetermineFormat(String format){
   if (format.... ????????)
       return dd.MM.yyyy HH:mm:ss
}

как определить в числовой последовательности и отправить формат в виде "dd.MM.yyyy HH:mm:ss" назад?
  • Вопрос задан
  • 463 просмотра
Решения вопроса 1
Therapyx
@Therapyx Автор вопроса
Data Science
Так как ответа я так и не нашел, то сделал все таки костылем через проверку возможных форматов
// list of a different format types. If you need new one, just past it here.
	private static List<SimpleDateFormat> dateFormats = new ArrayList<SimpleDateFormat>() {{
	    add(new SimpleDateFormat("MM/dd/yyyy hh:mm:ss")); //US
	    add(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss")); //EU
	    
	    add(new SimpleDateFormat("MM.dd.yyyy hh:mm:ss")); //US
	    add(new SimpleDateFormat("dd.MM.yyyy HH:mm:ss")); //EU
	    
	    add(new SimpleDateFormat("MM-dd-yyyy hh:mm:ss")); //US
	    add(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss")); //EU
}
};

Считывая строку, запихивая ее в функцию, которая пробегается по этому листу и если находит подходящий формат, то возвращает эту строку в Date формате назад...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы