I tempi a cavallo del giorno sono difficili da gestire, la via più semplice è convertire tutto in secondi.
E' il modo con cui vengono gestiti i timestamp di tipo *nix: si prende un'epoca di riferimento (nei SO *nix generalmente è il 1° gennaio 1970 ma tu puoi ad esempio prendere il 1° gennaio dell'anno in corso) e poi da lì iniziare a contare i secondi. In questo modo devi solo convertire i tempi di inizio e fine di un certo giorno di un certo mese di un certo anno in un timestamp. A questo punto puoi gestire tempi anche a cavallo del cambio di giorno, di mese o anche di anno. Ad esempio col sistema appena descritto l'avvio alle 23:30 del 31 dicembre 2013 e l'arresto alle 00:30 del 1° gennaio 2014 non è un problema.