У меня есть этот объект даты:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
значение d1 равно Fri Jan 07 17:40:00 PKT 2011
Теперь я пытаюсь добавить 10 минут к дате, указанной выше.
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
Значение newTime
меняется на, 2011-50-07 17:50
но должно быть 07-01-2011 17:50
.
Он правильно добавляет минуты, но также меняет месяц, не знаю почему!
java
date
calendar
simpledateformat
java.util.date
Джунаидп
источник
источник
Ответы:
Проблема для вас в том, что вы используете
mm
. Вам следует использоватьMM
.MM
для месяца иmm
для минут. Попробуйте сyyyy-MM-dd HH:mm
Другой подход:
Это может быть так просто (другой вариант - использовать joda-time )
источник
вы можете использовать класс DateUtils в пакете org.apache.commons.lang3.time
источник
org.apache.commons.lang.time.DateUtils
Метод удобства для реализации ответа @Pangea:
источник
Чтобы избежать любой зависимости, вы можете использовать java.util.Calendar следующим образом:
В Java 8 у нас есть новый API:
источник
Это неправильно указано:
Вы используете минуты вместо месяца (ММ)
источник
tl; dr
java.time
Используйте отличные классы java.time для работы с датой и временем. Эти классы вытесняют утомительные старые классы времени и даты, такие как
java.util.Date
иjava.util.Calendar
.ISO 8601
Классы java.time по умолчанию используют стандартные форматы ISO 8601 для синтаксического анализа / генерации строк значений даты и времени. Чтобы ваша входная строка соответствовала требованиям, замените ПРОБЕЛ посередине на
T
.LocalDateTime
Разберите входную строку как a,
LocalDateTime
поскольку в ней отсутствует информация о часовом поясе или смещении от UTC.Добавьте десять минут.
Смотрите живой код на IdeOne.com .
У
LocalDateTime
него нет часового пояса, поэтому он не представляет точку на временной шкале. Примените часовой пояс для перевода на текущий момент. Укажите правильное время имя зоны в форматеcontinent/region
, напримерAmerica/Montreal
,Africa/Casablanca
илиPacific/Auckland
, илиAsia/Karachi
. Никогда не используйте аббревиатуры из 3-4 букв, такие какEST
илиIST
или,PKT
поскольку они не являются истинными часовыми поясами, не стандартизированы и даже не уникальны (!).ZonedDateTime
Если вы знаете предполагаемый часовой пояс для этого значения, примените,
ZoneId
чтобы получитьZonedDateTime
.Аномалии
Подумайте, добавлять ли эти десять минут до или после добавления часового пояса. Вы можете получить совсем другой результат из-за аномалий, таких как переход на летнее время (DST), которые сдвигают время настенных часов .
Следует ли добавлять 10 минут до или после добавления зоны, зависит от значения вашего бизнес-сценария и правил.
Совет: когда вы планируете определенный момент на временной шкале, всегда сохраняйте информацию о часовом поясе . Не теряйте эту информацию, как это сделано с вашими входными данными. Значение
12:34
означает: полдень в Пакистане, полдень во Франции или полдень в Квебеке? Если вы имели в виду полдень в Пакистане, скажите об этом, включив хотя бы offset-from-UTC (+05:00
), а еще лучше - название часового пояса (Asia/Karachi
).Instant
Если вы хотите увидеть тот же момент через призму UTC , извлеките файл
Instant
.Instant
Класс представляет собой момент на временной шкале в формате UTC с разрешением наносекунд (до девяти (9) цифр десятичной дроби).Перерабатывать
По возможности избегайте проблемных старых классов даты и времени. Но если нужно, вы можете конвертировать. Вызов новых методов, добавленных к старым классам.
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Ошибка в шаблоне вашего SimpleDateFormat. так должно быть
источник
используйте этот формат,
мм для минут и ММ для месяца
источник
После анализа даты я использую эту служебную функцию, чтобы добавить часы, минуты или секунды:
Будьте осторожны при добавлении длительных периодов времени,
Calendar
для этого рекомендуется 1 день не всегда 24 часа (корректировки типа летнего времени, дополнительные секунды и т. Д.) .источник
Работайте со мной DateUtils
...
источник
Может быть выполнено без констант (например, 3600000 мс - 1 час)
пример использования:
источник
Для всех, кому интересно. Я работал над проектом iOS, который требовал аналогичной функциональности, поэтому я закончил перенос ответа @jeznag на быстрый
источник