Добавьте минуты к метке времени
Мне нужно добавить минуты в отметку времени и вернуть новое значение после этого. Отметка времени берется из базы данных и передается методу в виде строки и имеет следующий шаблон: гггг-мм-дд чч: мм: сс.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));