有没有人知道在java joda中减去两个本地时间的捷径? 我试图将其与我的C#代码进行比较,其中减法很容易完成。
Timespan t1 = timespan[i].Subtract(DateTime.Now.TimeOfDay);
我试图在java joda中获取此类内容而不进行转换,然后形成上述内容。
答案 0 :(得分:1)
由于您现在已经阐明了您的timespan-array意味着什么(实际上类型为LocalTime
,而不是timepan-type!),您可以获得一个更简单的解决方案来获得合适的Period
- 对象:
LocalTime lt1 = new LocalTime(14, 15); // start time
LocalTime lt2 = new LocalTime(21, 55); // or: LocalTime.now()
Period p = new Period(lt1, lt2, PeriodType.dayTime()); // in days, hours, minutes, seconds, millis
System.out.println(p); // output in ISO-8601 => PT7H40M
如果您想要字符串输出,那么您可以在答案中使用PeriodFormatter
。
与.NET代码相比,Joda-Time还提供了一个单行(我的代码示例中的第3行)。 Joda-Time的缺点是只有一个直接的构造函数,而不是像“Subtract”或“until”或类似的直观名称的方法。 Joda-Time的优点是能够指定.NET中可能缺少的所谓周期类型(如果我错了,请纠正我)。
答案 1 :(得分:-1)
我懒得搜索joda文档并想快速回答。 这是我的解决方案:
LocalTime[] timespan = null;
int t1_Totalmiliseconds= (timespan[i].getMillisOfDay())-(LocalTime.now().getMillisOfDay());
PeriodFormatter fmt = new PeriodFormatterBuilder()
.printZeroAlways()
.minimumPrintedDigits(2)
.appendMinutes()
.appendSeparator(":")
.printZeroAlways()
.minimumPrintedDigits(2)
.appendSeconds()
.toFormatter();
Period period = new Period(t1_Totalmiliseconds);
String now=fmt.print(period);