All
Я нахожусь в процессе или переписываю некоторый код, который я написал некоторое время назад. Целью кода было вычисление даты и времени на основе строки в следующих форматах:
- DayStart + 2hour + 1Day-2мин
- NOW + 20day
- MonthStart + 1month
Что займет начало дня (по местному времени), например 2011-09-15 00:00:00 BST (2011-09-15 23:00 GMT), затем прибавьте 2 часа, добавьте 1 день и вычтите 2 минуты.
Реализация на Java, и оригинальный алгоритм был довольно простым. Он просматривал каждый символ в строке и добавлялся в буфер. Затем буфер был проверен, чтобы увидеть, заканчивается ли он искомыми строками (указатель даты, например, MINUTE, HOUR, DAYSTART и т. Д.), Затем извлек число и добавил его в ArrayList, где DateOffset был простым классом с int и String. который был спецификатором даты. Вот пример кода:
// hard coded for sample
String s = "DayStart+2Hour+1Day-2Minutes";
StringBuilder sbBuffer = new StringBuilder();
String buffer;
// iterate through date string
for (char c : s.toCharArray()) {
sbBuffer.append(c);
buffer = sbBuffer.toString();
// check to see the end of the buffer string is what we expect
if (buffer.endsWith("DAYSTART")) {
offsets.add(new DateOffset(0, "DAYSTART"));
sbBuffer = new StringBuilder();
} else if (buffer.endsWith("DAY") && buffer.length() > 3) {
String numberStringPart = buffer.substring(0, buffer.length() - 3);
numberStringPart = numberStringPart.replaceAll("[+]", "").trim(); // need as parseInt does not like the +.
offsets.add(new DateOffset(Integer.parseInt(numberStringPart), "DAY"));
sbBuffer = new StringBuilder();
} ... and so on ...
else {
}
}
После анализа строки я перебрал ArrayList, чтобы вычислить дату и время.
Проблема с вышесказанным, вероятно, неэффективна, хотя у нас не было никаких проблем. Он также не обнаруживает никаких ошибок, поэтому вы можете ввести DayStart + 2GKGKER.
Я просто пытаюсь придумать свежие и аккуратные идеи о том, что использовать, чтобы переписать его. Я сделал небольшое регулярное выражение, но не слишком уверен, что это будет лучший маршрут.
Есть мысли?
Спасибо
Andez