минус 1 час до DateTime с использованием Joda Time

Я просто хочу вычесть 1 час из DateTime. Я попытался найти его в Google и обнаружил, что есть метод под названием minus, который берет копию даты и берет определенную продолжительность прямо здесь: http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#minus(long)

Но я не знаю, как его использовать, и я не могу найти пример в Интернете.

Вот мой код:

String string1 = (String) table_4.getValueAt(0, 1);
    String string2= (String) table_4.getValueAt(0, 2);

    DateTimeFormatter dtf = DateTimeFormat.forPattern("hh:mm a").withLocale(Locale.ENGLISH);
    DateTime dateTime1 = dtf.parseDateTime(string1.toString());
    DateTime dateTime2 = dtf.parseDateTime(string2.toString());

    final String oldf = ("hh:mm a");
    final String newf= ("hh.mm 0");
    final String newf2= ("hh.mm a");
    final String elapsedformat = ("hh.mm");

    SimpleDateFormat format2 = new SimpleDateFormat(oldf);
    SimpleDateFormat format2E = new SimpleDateFormat(newf); 

    Period timePeriod = new Period(dateTime1, dateTime2);

    PeriodFormatter formatter = new PeriodFormatterBuilder()

     .appendHours().appendSuffix(".")
     .appendMinutes().appendSuffix("")
     .toFormatter();

    String elapsed = formatter.print(timePeriod);

    table_4.setValueAt(elapsed,0,3);

    DecimalFormat df = new DecimalFormat("00.00");
    System.out.println(dateTime1);
    table_4.setValueAt("", 0, 4);
    table_4.setValueAt("", 0, 5);

Пример данных:

    dateTime1: 08:00 AM
    dateTime2: 05:00 PM

период составит 9 часов. но я хочу, чтобы это было 8 часов только потому, что я хочу вычесть перерыв на обед в своей программе.

Я пробовал это с помощью этого дурацкого кода:

dateTime1.minus(-1) 

Я также пробовал разобрать string1 на удвоение, чтобы можно было вычесть его на единицу.

double strindtoD = Integer.parseInt(string1);

Я также попытался сделать еще DateTime и использовать период, чтобы получить разницу двух значений времени.

String stringOneHour = ("01:00 AM");
DateTime dateTime3 = dtf.parseDateTime(stringOneHour.toString());
Period timePeriod = new Period(dateTime3, dateTime1);

person Maguzu    schedule 08.06.2013    source источник


Ответы (3)


Просто используйте:

dateTime.minusHours(1)

Это задокументировано в API < / а>.

Обратите внимание, что DateTime объекты неизменяемы, поэтому операция сама по себе не имеет никакого эффекта. Вам нужно присвоить результат этого метода новому объекту (или заменить себя):

dateTime = dateTime.minusHours(1);

Что касается того, как получить Period из разницы между двумя DateTime, вы должны сначала пройти Interval:

Period period = new Interval(begin, end).toPeriod();

Ссылка на сообщение SO, объясняющее, почему есть оба Period и Interval.

Дополнительное примечание: Joda Time использует МНОГО косвенных указаний в своем API; как таковое чтение Javadoc требует не только чтения методов для одного класса, но также просмотра списка унаследованных методов от всех унаследованных абстрактных классов / интерфейсов; например, DateTime также ReadableInstant. Но если привыкнуть, становится совсем несложно.

person fge    schedule 08.06.2013
comment
Что? Конечно, есть. Пользуюсь, работает нормально. Должно быть что-то еще, что вы делаете неправильно ... Обратите внимание на неизменность! - person fge; 08.06.2013
comment
Если вам нужен интервал между двумя датами, Joda Time имеет Interval. - person fge; 08.06.2013
comment
@JonSnow Хорошее имя для period, братан. - person Joshua Pinter; 13.06.2014
comment
@fge +1 для указания объектов DateTime неизменяем. - person user3354457; 10.09.2015

Если вы используете старую версию org.joda.time.DateTime, вы можете использовать метод minus (ReadablePeriod period), подобный этому

        Date date = LocalDate.now().minus(new Period(1, 0, 0, 0)).toDate();

где Period принимает параметры int часов, int минут, int секунд, int миллис

person Lance Reid    schedule 20.01.2016

Используя объект класса Calender, вы можете использовать этот метод для вычитания часов.

cal.add(Calendar.HOUR_OF_DAY, -numberOfHours);

а также полный пример ссылка

person Sandeep    schedule 12.11.2013