我有一个时间和分钟范围的表,"07:00“到"14:00”,还有一个获取这些值的Java Api。一开始我用的是秒(28800到50400)。
我想得到每5分钟的所有数值("07:05“、"07:10”、"07:15“、”07:20“)."08:15"..。"13:55“、"14:00")。
但我不太明白该如何干净地做这件事。
类方法(在控制台上工作得很好,但api的输出以纳米秒为单位):
@Transient
public List<LocalTime> getHorarios(){
long initialCapacity = 0;
List<LocalTime> times = new ArrayList<LocalTime> ( ( int ) initialCapacity );
while ( ! nextTime.isAfter ( stop ) ) {
times.add ( nextTime );
nextTime = nextTime.plusMinutes ( 5 );
}
return times;
}
@Transient
public List<LocalTime> getHorariosLibres(List<LocalTime> horariosTomados){
List<LocalTime> horariosLibres = getHorarios();
horariosLibres.removeAll(horariosTomados);
return horariosLibres;
}到目前为止,这是我的控制器:
@RequestMapping(value = "/horario/{fecha}", method = RequestMethod.GET)
@ResponseBody
public Object queryHorariosLibres(@PathVariable("fecha") @DateTimeFormat(pattern="yyyy-MM-dd") Date fecha) {
List<LocalTime> horariosTomados = turnoService.getHorariosTomados(fecha);
Calendar dia = new GregorianCalendar();
dia.setTime(fecha);
Horario horario = horarioRepository.findByDia(dia.get(Calendar.DAY_OF_WEEK));
List<LocalTime> horariosLibres = horario.getHorariosLibres(horariosTomados);
return horariosLibres;
} 通过API实现的实际输出:
[{"hour":7,"minute":0,"second":0,"nano":0},{"hour":7,"minute":5,"second":0,"nano":0},{"hour":7,"minute":10,"second":0,"nano":0},{"hour":7,"minute":15,"second":0,"nano":0},{"hour":7,"minute":20,"second":0,"nano":0},{"hour":7,"minute":25,"second":0,"nano":0},{"hour":7,"minute":30,"second":0,"nano":0},{"hour":7,"minute":35,"second":0,"nano":0},{"hour":7,"minute":40,"second":0,"nano":0},{"hour":7,"minute":45,"second":0,"nano":0},{"hour":7,"minute":50,"second":0,"nano":0},{"hour":7,"minute":55,"second":0,"nano":0},{"hour":8,"minute":0,"second":0,"nano":0},{"hour":8,"minute":5,"second":0,"nano":0},{"hour":8,"minute":10,"second":0,"nano":0},{"hour":8,"minute":15,"second":0,"nano":0},{"hour":8,"minute":20,"second":0,"nano":0},{"hour":8,"minute":25,"second":0,"nano":0},{"hour":8,"minute":30,"second":0,"nano":0},{"hour":8,"minute":35,"second":0,"nano":0},{"hour":8,"minute":40,"second":0,"nano":0},{"hour":8,"minute":45,"second":0,"nano":0},{"hour":8,"minute":50,"second":0,"nano":0},{"hour":8,"minute":55,"second":0,"nano":0},{"hour":9,"minute":0,"second":0,"nano":0},{"hour":9,"minute":5,"second":0,"nano":0},{"hour":9,"minute":10,"second":0,"nano":0},{"hour":9,"minute":15,"second":0,"nano":0},{"hour":9,"minute":20,"second":0,"nano":0},{"hour":9,"minute":25,"second":0,"nano":0},{"hour":9,"minute":30,"second":0,"nano":0},{"hour":9,"minute":35,"second":0,"nano":0},{"hour":9,"minute":40,"second":0,"nano":0},{"hour":9,"minute":45,"second":0,"nano":0},{"hour":9,"minute":50,"second":0,"nano":0},{"hour":9,"minute":55,"second":0,"nano":0},{"hour":10,"minute":0,"second":0,"nano":0},{"hour":10,"minute":5,"second":0,"nano":0},{"hour":10,"minute":10,"second":0,"nano":0},{"hour":10,"minute":15,"second":0,"nano":0},{"hour":10,"minute":20,"second":0,"nano":0},{"hour":10,"minute":25,"second":0,"nano":0},{"hour":10,"minute":30,"second":0,"nano":0},{"hour":10,"minute":35,"second":0,"nano":0},{"hour":10,"minute":40,"second":0,"nano":0},{"hour":10,"minute":45,"second":0,"nano":0},{"hour":10,"minute":50,"second":0,"nano":0},{"hour":10,"minute":55,"second":0,"nano":0},{"hour":11,"minute":0,"second":0,"nano":0},{"hour":11,"minute":5,"second":0,"nano":0},{"hour":11,"minute":10,"second":0,"nano":0},{"hour":11,"minute":15,"second":0,"nano":0},{"hour":11,"minute":20,"second":0,"nano":0},{"hour":11,"minute":25,"second":0,"nano":0},{"hour":11,"minute":30,"second":0,"nano":0},{"hour":11,"minute":35,"second":0,"nano":0},{"hour":11,"minute":40,"second":0,"nano":0},{"hour":11,"minute":45,"second":0,"nano":0},{"hour":11,"minute":50,"second":0,"nano":0},{"hour":11,"minute":55,"second":0,"nano":0},{"hour":12,"minute":0,"second":0,"nano":0},{"hour":12,"minute":5,"second":0,"nano":0},{"hour":12,"minute":10,"second":0,"nano":0},{"hour":12,"minute":15,"second":0,"nano":0},{"hour":12,"minute":20,"second":0,"nano":0},{"hour":12,"minute":25,"second":0,"nano":0},{"hour":12,"minute":30,"second":0,"nano":0},{"hour":12,"minute":35,"second":0,"nano":0},{"hour":12,"minute":40,"second":0,"nano":0},{"hour":12,"minute":45,"second":0,"nano":0},{"hour":12,"minute":50,"second":0,"nano":0},{"hour":12,"minute":55,"second":0,"nano":0},{"hour":13,"minute":0,"second":0,"nano":0},{"hour":13,"minute":5,"second":0,"nano":0},{"hour":13,"minute":10,"second":0,"nano":0},{"hour":13,"minute":15,"second":0,"nano":0},{"hour":13,"minute":20,"second":0,"nano":0},{"hour":13,"minute":25,"second":0,"nano":0},{"hour":13,"minute":30,"second":0,"nano":0},{"hour":13,"minute":35,"second":0,"nano":0},{"hour":13,"minute":40,"second":0,"nano":0},{"hour":13,"minute":45,"second":0,"nano":0},{"hour":13,"minute":50,"second":0,"nano":0},{"hour":13,"minute":55,"second":0,"nano":0},{"hour":14,"minute":0,"second":0,"nano":0}]发布于 2016-02-20 07:08:58
不需要在这里转你自己的数据类型。
java.time.LocalTime
Java8及更高版本有适合这种情况的数据类型:java.time.LocalTime,一个没有日期和没有时区的时间。将此用于您的业务逻辑。从这些对象,您可以生成一个字符串表示,以显示给用户。
java.sql.Time
JDBC有一种数据类型,用于在数据库中或从数据库中传递这些值:java.sql.Time。
String inputStart = "07:00";
String inputStop = "14:00";
LocalTime start = LocalTime.parse ( inputStart );
LocalTime stop = LocalTime.parse ( inputStop );
LocalTime nextTime = start;
Duration duration = Duration.ofMinutes ( 5 );
long initialCapacity = ( Duration.between ( start , stop ).toMinutes () / duration.toMinutes () ) + 1; // Optional line of code. Could be omitted.
List<LocalTime> times = new ArrayList ( ( int ) initialCapacity );
while ( ! nextTime.isAfter ( stop ) ) {
times.add ( nextTime );
nextTime = nextTime.plus ( duration ); // Or call .plusMinutes( int ) and pass a number of minutes.
}转储到控制台。
System.out.println ( "times: " + times + " initialCapacity: " + initialCapacity + " times.size " + times.size () );时间: 07:00,07:05,07:10,07:15,07:20,07:25,07:30,07:35,07:40,07:45,07:50,07:55,08:00,08:05,08:10,08:15,08:20,08:25,08:30,08:35,08:40,08:45,08:50,08:55,09:00,09:05,09:10,09:15,09:20,09:25,09:30,09:35,09:40、09:45、09:50、09:55、10:00、10:05、10:10、10:15、10:20、10:25、10:30、10:35、10:40、10:45、10:50、10:55、11:00、11:05、11:10、11:15、11:20、11:25、11:30、11:35、11:40、11:45、11:50、11:55、12:00、12:05、12:10、12:15、12:20、12:20,12:25,12:30,12:35,12:40,12:45,12:50,12:55,13:05,13:10,13:15,13:20,13:25,13:30,13:35,13:40,13:45,13:50,13:55,14:00 initialCapacity: 85 times.size 85
要输入数据库,请转换为java.sql.Time。
java.sql.Time sqlTime = java.sql.Time.valueOf( myLocalTime );时区
重要:请注意,您的原始代码和这个java.time代码示例都只使用假想的一天时间,假设一个虚构的24小时通用日。日照节约时间(DST)等反常现象意味着白天并不总是24小时长。您列出的某些时间在特定时区的特定日期上可能不存在。
如果您关心的是特定日期的真实时刻、有效时间,请使用java.time.ZonedDateTime (或.OffsetDateTime)。对于数据库传输,请使用java.sql.Timestamp。
发布于 2016-02-19 15:44:56
我会以分钟为单位,使用%和/。有点像
Map<String,Integer> storage = new HashMap<String,Integer>();
for (int i=420; i< 840; i+=5)
{
int hours = (i / 60);
int minutes = (i % 60);
String hourMinuteString = String.format("%02d", hours) + ":"
+ String.format("%02d", minutes);
storage.put(hourMinuteString, i);
}然后您可以检索分钟数
storage.get("10:45");https://stackoverflow.com/questions/35509048
复制相似问题