如何用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
相关产品推荐
相关产品推荐

