Puoi manipolare le stringhe o la timestamp fai come preferischi l'importante e' entrare corettamente nell'albero condizionale.

QUesto ti consente :

1- mantenere la funzione
2- non creare side effects dannosi nel codice che usa la funzione

quindi nella funzione di controllo inserisci i range di date dove avviene il cambio di ora(controllo 1 :date).

quindi in tali casi controlla ore e minuti e se devi effettuare una modifica modifica.... attenzione pero' che tutte le date dopo datax e ora x dovranno essere modificate quindi applica correttamente i range. E devi anche impostare che o l'ora legale o(esclusivamente) quella solare sia il default e quindi sommare (o sottrarre ) quell'ora maledetta...

P.S.
Sinceramente non capisco davvero perche' tu debba impazzire a mantenere le date senza ora legale/solare... ma se devi farlo ti basta fare un controllo del genere.