You need to enable JavaScript to run this app. 如何用Kotlin根据JSON起止时间生成2小时间隔时段并添加到Spinner
优惠活动
大模型
产品
解决方案
定价
更多

如何用Kotlin根据JSON起止时间生成2小时间隔时段并添加到Spinner

实现方案(Android 平台)

以下是分步实现逻辑和可直接复用的代码:

1. 封装时间处理工具

核心逻辑是把字符串格式的时间转成可计算的时间类型,按2小时间隔生成时间段,最后追加要求的额外2小时段:

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;

public class TimeSlotGenerator {
    // 和接口返回格式匹配的解析规则
    private static final SimpleDateFormat parseFormat = new SimpleDateFormat("H:mm", Locale.getDefault());
    // 和示例展示格式匹配的输出规则(12小时制)
    private static final SimpleDateFormat displayFormat = new SimpleDateFormat("h:mm", Locale.getDefault());

    public static ArrayList<String> generateTimeSlots(String startStr, String endStr) throws Exception {
        ArrayList<String> timeSlots = new ArrayList<>();

        // 解析接口返回的起止时间
        Calendar startTime = Calendar.getInstance();
        startTime.setTime(parseFormat.parse(startStr));
        Calendar endTime = Calendar.getInstance();
        endTime.setTime(parseFormat.parse(endStr));
        // 处理结束时间早于开始时间的跨天场景(比如开始22:00,结束2:00)
        if (endTime.before(startTime)) {
            endTime.add(Calendar.DAY_OF_MONTH, 1);
        }
        // 按要求计算最终截止节点:结束时间+2小时
        Calendar finalEndTime = (Calendar) endTime.clone();
        finalEndTime.add(Calendar.HOUR_OF_DAY, 2);

        // 循环生成所有时间段
        Calendar currentStart = (Calendar) startTime.clone();
        while (currentStart.before(finalEndTime)) {
            Calendar currentEnd = (Calendar) currentStart.clone();
            currentEnd.add(Calendar.HOUR_OF_DAY, 2);
            // 拼接时间段字符串
            String slot = displayFormat.format(currentStart.getTime()) + "-" + displayFormat.format(currentEnd.getTime());
            timeSlots.add(slot);
            // 更新下次循环的起始时间
            currentStart = currentEnd;
        }
        return timeSlots;
    }
}

提示:如果项目minSdk >= 26,可以直接用LocalTime替代Calendar实现,代码会更简洁,不需要手动处理跨天偏移逻辑。

2. 解析JSON并绑定到Spinner

拿到接口返回的JSON响应后,取出时间字段生成列表,再绑定到Spinner控件:

try {
    // 这里可以替换成你项目用的Gson、FastJson等解析方式
    JSONObject responseJson = new JSONObject(你的接口返回JSON字符串);
    String startingTime = responseJson.getString("StartingTime");
    String endingTime = responseJson.getString("EndingTime");
    // 生成时间段列表
    ArrayList<String> timeSlotList = TimeSlotGenerator.generateTimeSlots(startingTime, endingTime);
    
    // 绑定数据到Spinner
    Spinner timeSpinner = findViewById(R.id.你的Spinner控件ID);
    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(this, 
            android.R.layout.simple_spinner_item, timeSlotList);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    timeSpinner.setAdapter(spinnerAdapter);
    
} catch (Exception e) {
    e.printStackTrace();
}

3. 效果验证

按你给出的示例输入StartingTime="11:00"、EndingTime="5:00",生成的列表为["11:00-1:00", "1:00-3:00", "3:00-5:00", "5:00-7:00"],完全符合要求。


内容的提问来源于stack exchange,提问作者Areeb Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 10:45:04