Добавьте минуты к метке времени

Мне нужно добавить минуты в отметку времени и вернуть новое значение после этого. Отметка времени берется из базы данных и передается методу в виде строки и имеет следующий шаблон: гггг-мм-дд чч: мм: сс.SSSSSS

public static String changeCreditTimeStampMin(String tmStmp, int minutesToAdd) {

    tmStmp = tmStmp.substring(0, tmStmp.length() - 3);
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
        java.util.Date parsedDate = dateFormat.parse(tmStmp);
        java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime() + minutesToAdd*60*1000);
        tmStmp = timestamp.toString();
    } catch (ParseException e) {
        e.printStackTrace();
    }catch(Exception e){
        e.printStackTrace();
    }
    return tmStmp;
}

Как вы можете видеть, моя логика использует SimpleDateFormat, и для ее использования я должен использовать операцию подстроки на временной метке. Мой вопрос, есть ли лучший способ получить тот же результат, не обрезая строку метки времени? Обратите внимание, что моя версия Java 1.5 и я не могу использовать более новые версии.

2 ответа

Лучше?

Да, используйте классы java.time, а не старые устаревшие классы даты и времени.

Измените строковый ввод на стандартный формат ISO 8601, заменив пространство посередине на T, Я предполагаю, что эта строка должна была представлять момент в UTC. Итак, добавьте Z, сокращение от Zulu, что означает UTC.

Классы java.time по умолчанию используют форматы ISO 8601 при разборе / генерации строковых представлений. Так что передавайте напрямую в метод разбора, не удосужившись определить шаблон форматирования. Instant представляет момент на временной шкале в UTC с результатом ион наносекунд.

Instant instant = Instant.parse( input );

Добавьте минут. Если вы хотите сделать это в UTC, и вам не нужно обрабатывать часовые пояса и аномалии, такие как переход на летнее время (DST), используйте это Instant создать другое. В противном случае примените W часовой пояс, чтобы получить ZonedDateTime,

long minutes = 5L;
Instant later = instant.plus( minutes , ChronoUnit.MINUTES );

Совет: передайте эти Instant объекты вокруг вашего приложения, а не строки.

Для вас проблема в том, что вы используете мм. Вы должны использовать MM. ММ за месяц, а мм за минуты. Попробуйте с гггг-ММ-дд ЧЧ: мм

Другой подход:

static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs
Calendar date = Calendar.getInstance(); 
long t=date.getTimeInMillis(); 
Date afterAddingTenMins=new Date(t + (10 *ONE_MINUTE_IN_MILLIS));
Другие вопросы по тегам