Вопрос с датами. Не совсем про бакит.

  • Автор темы Автор темы Ant1m0
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Ant1m0

Активный участник
Пользователь
Баллы
66
Ребят, здрасьте. Вопрос НЕ ПРО БАКИТ. Гуглил нашел что-то, но не совсем то, что нужно.
Есть например строка "5d4h10m" нужно распарсить в ms, ну типо да, в циферки.
Получится типо 5 days, 4hours 10minutes = (5 * 24 * 3600 * 1000) + (4 * 3600 * 1000) + ( 10 * 60 * 1000)
В итоге выйдет long = 447000000;
Кхм, так вот есть ли в стандартной библиотеке Java какой-нибудь метод, помогающий в этом?
 
Нет, но ручками делается за несколько минут.
 
Ну вот ручек у кого-то нету
Набросал прямо в окне сообщения, так что за работоспособность ручаться не могу.
PHP:
private final Pattern TIMES = Pattern.compile("(\d+)(ms|[smhdy])");

public long parseTime(String timeStr) {
    Matcher matcher = TIMES.matcher(timeStr);
    long totalTime = 0;
    while(matcher.find()) {
        long digits = Long.parseLong(matcher.group(1));
        switch(matcher.group(2)) {
            case "y": digits *= 365;
            case "d": digits *= 24;
            case "h": digits *= 60;
            case "m": digits *= 60;
            case "s": digits *= 1000;
            // case "ms": digits *= 1; Already calculating in MS
        }
        totalTime += digits;
    }
    return totalTime;
}
Идея: берем регулярку с разделенным числом и "типом" времени; включаем матчер; получаем из строки число и тип; если ловим тип "h", то число "спускается" вниз и умножается на все нужные ему значения само; складываем; повторяем.
Сразу скажу - это не очень эффективно, и если метод будет выполняться по сотне раз в секунду - стоит рассмотреть иные решения. Зато выглядит симпатично ;D
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх