Eine Gruppe (?:\s*) zu bilden bringt gegenüber \s* keinen Vorteil. Ich würde per (?x) die erweiterte Syntax einschalten, dann kannst du im Regex Leerstellen zur besseren Lesbarkeit verwenden, Leerstellen werden dann für das Parsen ignoriert.
OK, und wie genau gehe ich da jetzt vor? Step by Step? Leuchtet meine Erklärung zum Aufbau des Datums ein?