我只想从DateTime
中减去1小时我尝试在Google上查找它并且我发现有一个名为minus的方法需要复制日期并在此处采取特定的持续时间:{ {3}}
但我不知道如何使用它,我无法在互联网上找到一个例子。
这是我的代码:
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);
答案 0 :(得分:39)
只需使用:
dateTime.minusHours(1)
请注意DateTime
个对象是不可变的,因此单独的操作无效。您需要将此方法的结果分配给新对象(或替换自身):
dateTime = dateTime.minusHours(1);
至于如何从两个Period
之间的差异中获得DateTime
,您必须首先查看Interval
:
Period period = new Interval(begin, end).toPeriod();
Link到SO帖子,解释为什么同时存在Period
和Interval
。
旁注:Joda Time在其API中使用了很多间接;因此,读取Javadoc不仅需要一个人读取一个类的方法,而且还要查看所有继承的抽象类/接口的继承方法列表;例如,DateTime
也是ReadableInstant
。不过,你已经习惯了它,这是一件轻而易举的事。
答案 1 :(得分:0)
如果您使用的是旧版本的org.joda.time.DateTime,那么您可以使用像这样的减号(ReadablePeriod period)方法
Date date = LocalDate.now().minus(new Period(1, 0, 0, 0)).toDate();
其中Period接受int hours,int minutes,int seconds,int millis参数
答案 2 :(得分:-1)