Добавление многих дней к Моменту JodaTime

Я также думаю, что нет ничего плохого в том, чтобы иметь двоичные файлы в управлении исходным кодом ... если есть веская причина для этого. Если у меня есть сборка, для которой у меня нет исходного кода, и она может не обязательно находиться в одном и том же месте на каждом компьютере разработчика, я обычно помещаю ее в каталог «binaries» и ссылаюсь на нее в проекте, используя относительный путь ,

Довольно много людей, кажется, думают, что я должен быть сожжен на костре за то, что даже упомянул «контроль источника» и «двоичный код» в одном предложении. Я даже знаю места, где есть строгие правила, согласно которым вы не можете их добавить.

6
задан JodaStephen 22 August 2013 в 11:16
поделиться

3 ответа

Это решение, которое было выбрано.

/**
* Zone to use for input and output
*/
private static final DateTimeZone ZONE = DateTimeZone.forId("Europe/London");

/**
 * Adds a number of days specified to the instant in time specified.
 *
 * @param instant - the date to be added to
 * @param numberOfDaysToAdd - the number of days to be added to the instant specified
 * @return an instant that has been incremented by the number of days specified
 */
public static Instant addNumberOfDaysToInstant(final Instant instant, final int numberOfDaysToAdd) {
    return instant.toDateTime(ZONE).withFieldAdded(DurationFieldType.days(), numberOfDaysToAdd).toInstant();
}
0
ответ дан 10 December 2019 в 00:42
поделиться

Если вы хотите иметь дело с датами , не используйте моменты времени. Я подозреваю, что он правильно добавляет 48 часов к моменту.

Используйте вместо этого LocalDate , а затем метод plusDays .

Если вы хотите узнать момент, который наступит, n дней после указанного момента, в то же время суток, мы, несомненно, могли бы разработать способ сделать это (разделить момент на LocalDate и LocalTime , продвинуть LocalDate , а затем соберите заново, или проверьте, выполняет ли LocalDateTime то, что вы хотите), но вам нужно решить, что вы хотите, если исходное время повторяется дважды в новый день или не происходит вообще.

РЕДАКТИРОВАТЬ: Итак, вам нужно работать мгновенно. Это должно быть в исходном часовом поясе? Не могли бы вы использовать UTC? Это устранит проблемы с переходом на летнее время. Если нет, что вы хотите, чтобы он делал в случае двусмысленности или отсутствия (например, в 12:30 перед каждым переходом).

8
ответ дан 10 December 2019 в 00:42
поделиться

Предполагая остальную часть вашего кода:

public static void main(String[] args) {

  DateTime dateTime = FORMATTER.parseDateTime("24/10/2009");
  Instant pInstant = dateTime.withFieldAdded(DurationFieldType.days(),2).toInstant();
  System.out.println("24/10/2009  + 2 Days = " + pInstant.toString(FORMATTER));
}
2
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: