在android中减去两个localtime()

时间:2014-08-10 23:37:34

标签: android jodatime

有没有人知道在java joda中减去两个本地时间的捷径? 我试图将其与我的C#代码进行比较,其中减法很容易完成。

Timespan t1 = timespan[i].Subtract(DateTime.Now.TimeOfDay);

我试图在java joda中获取此类内容而不进行转换,然后形成上述内容。

2 个答案:

答案 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);