如何在android中给定两个范围之间产生时间?

时间:2016-02-06 10:09:46

标签: android datetime for-loop spinner

我正在开发一个Android应用程序。我在这一点上陷入困​​境:

用户使用微调器选择时间范围。然后它显示给定范围与特定时间间隔之间的时间。我试过并且顺利但是在12之后我们必须及时打印1,这是我无法做到的。在下面添加一个例子。我不知道如何实现它。 例如。 如果用户选择9-2,我们必须生成类似

9.00 9.30 10.00 10.30 11.00 11.30 12.00 12.30 1.00 1.30 2.00

有人可以帮助我吗? 即使只是一个想法也足够了。 如果您需要我的编码,我会在稍后添加。

3 个答案:

答案 0 :(得分:1)

这是生成时间间隔int setted range的代码。您只需要从TimeIntervalHelper调用方法。

以下是代码:

public class TimeIntervalHelper {
    public static void generateTimeInterval(final ArrayList<String> intervals, final int startHour, final boolean isStartHalf, int endHour, final boolean isEndHalf) {
        final Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR, startHour);
        calendar.set(Calendar.MINUTE, isStartHalf ? 30 : 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);

        endHour = endHour == 12 ? 0 : endHour;
        while (calendar.get(Calendar.HOUR) != endHour)
            intervals.add(getInterval(calendar));
        intervals.add(getInterval(calendar));

        if (isEndHalf)
            intervals.add(getInterval(calendar));
    }

    public static void generateTimeInterval(final ArrayList<String> intervals, final int startHour, int endHour) {
        generateTimeInterval(intervals, startHour, false, endHour, false);
    }

    private static String getInterval(final Calendar calendar) {
        final String interval = String.format(
                "%d.%02d",
                calendar.get(Calendar.HOUR) != 0 ? calendar.get(Calendar.HOUR) : 12,
                calendar.get(Calendar.MINUTE)
        );
        calendar.add(Calendar.MINUTE, 30);
        return interval;
    }
}

以下是样本:

final ArrayList<String> intervals = new ArrayList<>();
TimeIntervalHelper.generateTimeInterval(intervals, 9, 2); // Generate from 9 to 2
TimeIntervalHelper.generateTimeInterval(intervals, 9, false, 2, true); // Generate from 9 to 2.30

答案 1 :(得分:0)

如果您只关心格式,请查看DateTimeFormatter。示例(略有修改)

  LocalDate date = LocalDate.now();
  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm");
  String text = date.format(formatter);
  LocalDate parsedDate = LocalDate.parse(text, formatter);

您应该能够管理转换为LocalDate ;-)。如果没有,请这样说(并发布您尝试过的代码)。

对于日期生成,这里有一些代码。使用旧的日期API有点困难,但是:

long intervalMillis;
Date startingDate, endDate;
List<Date> dateList = new ArrayList<Date>();
dateList.add(date);
while ( date.before(endDate) || date.equals(endDate) ) {
    date = new Date(date.getTime() + intervalMillis);
    dateList.append(date);
}

如果您想使用new time API,可以

Instant start, end;
Duration increment;
Instant moment = start;
List<Instant> dateList = new ArrayList<Instant>();
dateList.add(moment);
while ( moment.isBefore(end) || moment.equals(end) ) {
    moment = moment.plus(increment);
    dateList.add(moment);
}

答案 2 :(得分:0)

我认为您使用的是12小时的日期格式

请将您的日期格式更改为24小时,然后检查它是否有效..

谢谢..