Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 剩余时间与乔达时间_Android_Time_Jodatime - Fatal编程技术网

Android 剩余时间与乔达时间

Android 剩余时间与乔达时间,android,time,jodatime,Android,Time,Jodatime,我想在我的Android应用程序中学习18.30的剩余时间。但是,在joda时间代码中有年、月和日。我想用joda time作为剩余时间,不带日期 我的代码并没有将剩余时间再重新设定几天,当日期和时间过去时,还押时间是负值。所以,我想删除日期值 DateTime startDate = DateTime.now(); // now() : since Joda Time 2.0 DateTime endDate = new DateTime(2014, 10, 3

我想在我的Android应用程序中学习18.30的剩余时间。但是,在joda时间代码中有年、月和日。我想用joda time作为剩余时间,不带日期

我的代码并没有将剩余时间再重新设定几天,当日期和时间过去时,还押时间是负值。所以,我想删除日期值

DateTime startDate = DateTime.now(); // now() : since Joda Time 2.0
                DateTime endDate = new DateTime(2014, 10, 30, 18, 30);

                Period period = new Period(startDate, endDate, PeriodType.dayTime());

                PeriodFormatter formatter = new PeriodFormatterBuilder()
                        .appendDays().appendSuffix(" day ", " days ")
                        .appendHours().appendSuffix(" hour ", " hours ")
                        .appendMinutes().appendSuffix(" minute ", " minutes ")
                        .appendSeconds().appendSuffix(" second ", " seconds ")
                        .toFormatter();
                 tw.setText(formatter.print(period));

我在

上解释说,由于一些英语错误,你的课文不太容易理解。所以这可能是目前还没有答案的主要原因。但是,您的图表非常清晰,并且显示了您的努力(所以我想知道为什么直到现在还没有答案)。实际上,您正在搜索下一个当地时间18:30之前的剩余时间

这里有一个Joda解决方案:

DateTime startDate = DateTime.now();
DateTime endDate = startDate.withTime(18, 30, 0, 0); // can move back in time!

if (startDate.toLocalTime().isAfter(new LocalTime(18, 30))) {
    endDate = endDate.plusDays(1); // compensation for having moved back
}

Period period = new Period(startDate, endDate, PeriodType.dayTime());

PeriodFormatter formatter = new PeriodFormatterBuilder()
        .appendDays().appendSuffix(" day ", " days ")
        .appendHours().appendSuffix(" hour ", " hours ")
        .appendMinutes().appendSuffix(" minute ", " minutes ")
        .appendSeconds().appendSuffix(" second ", " seconds ")
        .toFormatter();
System.out.println(formatter.print(period));

// output at now about 18:28 => 1 minute 48 seconds 
// output at now about 18:31 => 23 hours 59 minutes 1 second 
正如你所看到的,这个解决方案有些尴尬。这样的编码是开发我自己的库Time4J的众多原因之一。它提供了以下不带任何if条件的较短解决方案:

  PlainTimestamp start = SystemClock.inLocalView().now();
  PlainTimestamp end = 
    start.with(PlainTime.COMPONENT.setToNext(PlainTime.of(18, 30)));
  Duration<ClockUnit> duration = Duration.inClockUnits().between(start, end);

  String p = PrettyTime.of(Locale.UK).print(duration, TextWidth.WIDE, true, 3);
  System.out.println(p); // 23 hours, 40 minutes and 1 second
PlainTimestamp start=SystemClock.inLocalView().now();
时间戳结束=
start.with(PlainTime.COMPONENT.setToNext(PlainTime.of(18,30));
Duration Duration=Duration.inClockUnits()。介于(开始、结束)之间;
字符串p=PrettyTime.of(Locale.UK).print(duration,TextWidth.WIDE,true,3);
System.out.println(p);//23小时40分1秒
我个人认为JoDA时间是过时的,因为大多数人都希望使用Java8中构建的新的库,该Java8驻留在包JavaTime(它不能持续格式)。而且Joda Time也没有真正的未来发展(如果我们多年来一直诚实的话)。根据Joda Time的博客帖子,该项目负责人似乎希望在他的新的Three Ten额外图书馆中有任何进一步的发展