Java 如何在ArrayList中加入30分钟,如上午8:00、上午8:30、上午9:00、上午9:30等等,直到晚上9:00?
我想创建一个具有 上午8:00-8:30Java 如何在ArrayList中加入30分钟,如上午8:00、上午8:30、上午9:00、上午9:30等等,直到晚上9:00?,java,android,date,android-spinner,android-calendar,Java,Android,Date,Android Spinner,Android Calendar,我想创建一个具有 上午8:00-8:308:30-9:009:00-9:30 我对ArrayList所做的时间间隔如下 ArrayList[08:00:AM, 09:00:AM, 10:00:AM, 11:00:AM, 12:00:PM, 13:00:PM, 14:00:PM, 15:00:PM, 16:00:PM, 17:00:PM, 18:00:PM, 19:00:PM, 20:00:PM, 21:00:PM] 上午8:009:0010:00 等等 我得到了类似于 ArrayList[08
8:30-9:00
9:00-9:30
我对ArrayList所做的时间间隔如下
ArrayList[08:00:AM, 09:00:AM, 10:00:AM, 11:00:AM, 12:00:PM, 13:00:PM, 14:00:PM, 15:00:PM, 16:00:PM, 17:00:PM, 18:00:PM, 19:00:PM, 20:00:PM, 21:00:PM]
上午8:009:00
10:00
等等 我得到了类似于
ArrayList[08:00:AM, 09:00:AM, 10:00:AM, 11:00:AM, 12:00:PM, 13:00:PM, 14:00:PM, 15:00:PM, 16:00:PM, 17:00:PM, 18:00:PM, 19:00:PM, 20:00:PM, 21:00:PM]
这是我的代码:
public class MainActivity extends AppCompatActivity {
ArrayList<String> hours = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initCustomTimeSpinner();
}
private void initCustomTimeSpinner() {
Spinner spinnerCustom = (Spinner) findViewById(R.id.spinner2);
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:a");
SimpleDateFormat startHourFormat = new SimpleDateFormat("HH");
cal.set(Calendar.HOUR_OF_DAY, 8);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
int startHour = Integer.parseInt(startHourFormat.format(cal.getTime()));
Log.e("startHour", Integer.toString(startHour));
Log.e("withot format Starttime", cal.getTime().toString());
SimpleDateFormat endHourFormat = new SimpleDateFormat("HH");
cal.set(Calendar.HOUR_OF_DAY, 21);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
int endHour = Integer.parseInt(endHourFormat.format(cal.getTime()));
Log.e("endHour", Integer.toString(endHour));
Log.e("withot format End time", cal.getTime().toString());
String test = sdf.format(cal.getTime());
Log.e("TEST", test);
for (int i = startHour; i <= endHour; i++) {
cal.set(Calendar.HOUR_OF_DAY, i);
hours.add(sdf.format(cal.getTime()));
System.out.println("ArrayList" + hours);
}
}
}
public类MainActivity扩展了AppCompatActivity{
ArrayList小时数=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initCustomTimeSpinner();
}
私有void initCustomTimeSpinner(){
Spinner spinnerCustom=(Spinner)findViewById(R.id.spinner2);
Calendar cal=Calendar.getInstance();
SimpleDataFormat sdf=新的SimpleDataFormat(“HH:mm:a”);
SimpleDataFormat StartOutFormat=新的SimpleDataFormat(“HH”);
校准设置(日历小时/天,8);
校准设置(日历分钟,0);
校准设置(日历秒,0);
int startHour=Integer.parseInt(startHourFormat.format(cal.getTime());
Log.e(“startHour”,Integer.toString(startHour));
Log.e(“withot format Starttime”,cal.getTime().toString());
SimpleDataFormat endHourFormat=新的SimpleDataFormat(“HH”);
校准设置(日历小时/天,21);
校准设置(日历分钟,0);
校准设置(日历秒,0);
int endHour=Integer.parseInt(endHourFormat.format(cal.getTime());
Log.e(“endHour”,Integer.toString(endHour));
Log.e(“withot格式结束时间”,cal.getTime().toString());
字符串测试=sdf.format(cal.getTime());
Log.e(“测试”,测试);
对于(inti=startHour;i,下面是使用Java 8 time API构建时隙的简单示例:
public static void printTimeSlots(LocalTime startTime, LocalTime endTime, int slotSizeInMinutes) {
for (LocalTime time = startTime, nextTime; time.isBefore(endTime); time = nextTime) {
nextTime = time.plusMinutes(slotSizeInMinutes);
if (nextTime.isAfter(endTime))
break; // time slot crosses end time
System.out.println(time + "-" + nextTime);
}
}
试验
输出
08:00-08:30
08:30-09:00
09:00-09:30
09:30-10:00
10:00-10:30
10:30-11:00
11:00-11:30
11:30-12:00
12:00-12:30
12:30-13:00
13:00-13:30
13:30-14:00
14:00-14:30
14:30-15:00
15:00-15:30
15:30-16:00
16:00-16:30
16:30-17:00
测试#2,证明未对齐的结束时间
10:05-10:20
10:20-10:35
10:35-10:50
10:50-11:05
11:05-11:20
11:20-11:35
11:35-11:50
当然,如果您不想以分钟为单位限制插槽大小,可以使用TemporalAmount
而不是分钟数:
public static void printTimeSlots(LocalTime startTime, LocalTime endTime, TemporalAmount amountToAdd) {
for (LocalTime time = startTime, nextTime; time.isBefore(endTime); time = nextTime) {
nextTime = time.plus(amountToAdd);
if (nextTime.isAfter(endTime))
break; // time slot crosses end time
System.out.println(time + "-" + nextTime);
}
}
试验
10:05:15-10:20:40
10:20:40-10:36:05
10:36:05-10:51:30
10:51:30-11:06:55
11:06:55-11:22:20
11:22:20-11:37:45
11:37:45-11:53:10
你到底在哪里遇到了困难?在创建半小时间隔时遇到了困难我得到了一个列表,比如上午8:00,上午9:00,但正如我提到的,我想在第一个索引中创建上午8:00-8:30,第二个索引中创建上午8:30-9:00,等等进一步的索引你尝试了什么?你到底在哪里失败了?你似乎在要求我们为你编写它,我们已经完成了JoeC我只是想问一下逻辑,我试过了,得到了8:00 am、9:00 am等列表,如果你愿意的话,我可以分享我的github linkFYI,那些麻烦的旧日期时间类,比如java.util.date
,java.util.Calendar
,和java.text.SimpleDateFormat
,现在已经被这些类取代了。java.t的大部分ime功能在年被移植到Java 6和7。在项目中进一步适应Android。请参阅@JuanCarlosMendoza for Android,这实际上应该是
public static void printTimeSlots(LocalTime startTime, LocalTime endTime, TemporalAmount amountToAdd) {
for (LocalTime time = startTime, nextTime; time.isBefore(endTime); time = nextTime) {
nextTime = time.plus(amountToAdd);
if (nextTime.isAfter(endTime))
break; // time slot crosses end time
System.out.println(time + "-" + nextTime);
}
}
printTimeSlots(LocalTime.parse("10:05:15"),
LocalTime.parse("11:55:00"),
Duration.ofMinutes(15).plusSeconds(25));