我正在尝试用Java生成时间列表。关于如何一起添加两次,我已阅读this。我在转换为使用时间之前使用浮点数编写代码,因此我知道代码的一般格式有效。这是我遇到困难的代码:
public class Test2 {
public static void main(String[] args){
String time = "09:00";
String quarterHour = "00:15";
String halfHour = "00:30";
String quarterHour3 = "00:45";
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
Date times;
Date temp;
long sum;
try {
times = timeFormat.parse(time);
while(times.before(timeFormat.parse("15:15"))){
System.out.println("Timelist: " + time);
if((times.equals(timeFormat.parse("10:15"))) || (times.equals(timeFormat.parse("13:45")))){
temp = timeFormat.parse(halfHour);
sum = times.getTime() + temp.getTime();
time = timeFormat.format(new Date(sum));
times = timeFormat.parse(time);
}
else if(times.equals(timeFormat.parse("11:45"))){
temp = timeFormat.parse(quarterHour3);
sum = times.getTime() + temp.getTime();
time = timeFormat.format(new Date(sum));
times = timeFormat.parse(time);
}
else{
temp = timeFormat.parse(quarterHour);
sum = times.getTime() + temp.getTime();
time = timeFormat.format(new Date(sum));
times = timeFormat.parse(time);
}
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我得到的结果就是09:00。它经历了一次循环并结束。
我通过调试器跟踪它,发生的事情是,当它将quarterHour添加到时间时它会增加12:15而不是00:15,因为它应该是。
这似乎与我使用24小时的时间有关,就像我改变了:
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
为:
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm");
它有效 - 除了它进入一个永恒的循环。
问题:在使用24小时格式时,如何让它仅添加15分钟?
答案 0 :(得分:2)
使用Calendar
,或者如果您使用的是Java 8,则可以使用新的java.time
类,例如
String timeStr = "09:00";
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
try {
LocalDateTime endTime = LocalDateTime.ofInstant(
Instant.ofEpochMilli(timeFormat.parse("15:15").getTime()),
ZoneOffset.ofHours(0));
Instant instant = Instant.ofEpochMilli(timeFormat.parse(timeStr)
.getTime());
LocalDateTime time = LocalDateTime.ofInstant(instant,
ZoneOffset.ofHours(0));
while (time.isBefore(endTime)) {
time = time.plus(15, ChronoUnit.MINUTES);
Instant output = time.atZone(ZoneOffset.ofHours(0)).toInstant();
System.out.println(timeFormat.format(Date.from(output)));
}
} catch (Exception e) {
e.printStackTrace();
}
或者Calendar
喜欢
String timeStr = "09:00";
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
try {
Calendar cal = Calendar.getInstance();
cal.setTime(timeFormat.parse(timeStr));
Date when = timeFormat.parse("15:15");
while (cal.getTime().before(when)) {
cal.add(Calendar.MINUTE, 15);
System.out.println(timeFormat.format(cal.getTime()));
}
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:1)
将此行添加到您的代码中:
timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
在您宣布timeFormat
之后立即。
它可以解决您的问题。