Étant donné que votre structure de données doit accueillir les dates avec et sans temps, vous avez deux choix:
Utilisez un objet DateTime Ruby avec une valeur de drapeau pour le moment d'indiquer que la date n'a pas temps. La valeur de drapeau habituelle est 0, ce qui signifie que l'heure de minuit ne peut pas être affichée. (Minuit est 0 secondes après la journée a commencé.)
Par exemple, l'analyse syntaxique "1 janvier 2010" dans un DateTime vous donnera 1 janvier 2010 00:00.
Sinon, vous aurez besoin d'inventer votre propre structure de données. Le plus facile serait probablement une classe avec un DateTime et un drapeau booléen "show_time". - en utilisant un DateTime pour conserver l'heure, vous serez capable d'utiliser les méthodes de sortie DateTime, et de faire de l'arithmétique avec eux si nécessaire.
Créer une nouvelle structure de données n'est pas une grosse affaire dans Ruby, mais si vous pouvez vivre sans tâches dues exactement à minuit, je recommanderais la méthode 1. Notez que vous voudrez probablement les imprimer sans temps puisque c'est ce que le définisseur de tâche a demandé. Ou vous pouvez inclure "(à tout moment)" dans la sortie.
PS
Attention aux fuseaux horaires! Beaucoup de manières de manipuler, mais vous devriez être sûr d'en choisir un délibérément.
Quelle est votre base de données? supporte-t-il les champs date/heure séparés? –
MySQL, donc il prend en charge les types de date et heure au lieu de DateTime –