Tienes 2 problemas.
Como almacenar y como mostrar.
Como almacenar ya te dieron tips. No hay problema en incluso ser mas directo y guardar algo asi : "7:00 a.m - 5:03 p.m", lo cual tendrias que parsear, o pones en 2 campos decimales con 2 digitos: "7.00", "17.03".
E incluso puede que tu BD ya tenga algo nativo. En postgresql:
https://www.postgresql.org/docs/9.2/...angetypes.html
Código SQL
[-]
CREATE TABLE reservation (room int, during tsrange);
INSERT INTO reservation VALUES
(1108, '[2010-01-01 14:30, 2010-01-01 15:30)');
-- Containment
SELECT int4range(10, 20) @> 3;
-- Overlaps
SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);
-- Extract the upper bound
SELECT upper(int8range(15, 25));
-- Compute the intersection
SELECT int4range(10, 20) * int4range(15, 25);
-- Is the range empty?
SELECT isempty(numrange(1, 5));
Y si tu BD permite crear tipos propios aun si no lo tiene se le puede crear uno (tal como harias en cualquier lenguaje). Eso funciona hasta en sqlite.
---
Para mostrar, cual es la forma mas directa?
Tal como en la BD. Pones 2 edit con mascara que escriban:
[7:00] - [17:03]
Y ya. Los combos y similares NO SON TAN EFICIENTES COMO LA EDICION DIRECTA! De hecho como se haria totalmente libre? En una sola caja uno escribe:
7:00 a 17:03
Y listo. Rápido. Hay que parsear? Si, pero simplemente te estoy dando a entender que las soluciones simples (al usuario) están a la mano.
Y si quieres algo mas visual? Un control de rango, tipo:
http://stackoverflow.com/questions/4...ange-of-values
http://www.tmssoftware.com/site/advtrackbar.asp