Минус 1 час до DateTime с использованием Joda Time
Я просто хочу вычесть 1 час из DateTime
, я попытался найти его в Google, и я обнаружил, что есть метод, называемый минусом, который берет копию даты и занимает определенную продолжительность прямо здесь: 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);
Ответы
Ответ 1
Просто используйте:
dateTime.minusHours(1)
Это задокументировано в API.
Обратите внимание, что объекты DateTime
неизменяемы, поэтому сама операция не имеет эффекта. Вам нужно присвоить результат этого метода новому объекту (или заменить его):
dateTime = dateTime.minusHours(1);
Что касается того, как получить Period
вне разницы между двумя DateTime
s, вы должны сначала пройти через Interval
:
Period period = new Interval(begin, end).toPeriod();
Ссылка на сообщение SO, объясняющее, почему существуют Period
и Interval
.
Боковое примечание: Joda Time использует LOT-направления в своем API; как таковое чтение Javadoc требует не только чтения методов для одного класса, но и просмотра списка унаследованных методов из всех унаследованных абстрактных классов/интерфейсов; например, a DateTime
также является ReadableInstant
. Один из них вы привыкнете к этому, хотя это легкий ветерок.
Ответ 2
Если вы используете более старую версию org.joda.time.DateTime, вы можете использовать метод минус (ReadablePeriod period), подобный этому
Date date = LocalDate.now().minus(new Period(1, 0, 0, 0)).toDate();
где Период принимает int hours, int minutes, int seconds, int millis parameters
Ответ 3
Используя объект класса Calender, вы можете использовать этот метод для вычитания часов.
cal.add(Calendar.HOUR_OF_DAY, -numberOfHours);
а также полный пример ссылка