Comment créer un objet de date Ruby à partir de la chaîne suivante?
DD-MM-YYYY
Date.parse('31-12-2010')
Alternativement Date#strptime(str, format)
.
Comme aux États-Unis, les dates sont inversées, il est important de ne pas utiliser simplement Date.parse()
, car vous constaterez que le 11 septembre 2001 peut être le 11 septembre 2001 aux États-Unis et le 9 novembre 2001 dans le reste du monde. Pour être complètement non ambigu, utilisez Date::strptime(your_date_string,"%d-%m-%Y")
afin d’analyser correctement une chaîne de date au format dd-mm-yyyy
.
Essayez ceci pour être sûr:
>irb
>> require 'date'
=> true
>> testdate = '11-09-2001'
=> "11-09-2001"
>> converted = Date::strptime(testdate, "%d-%m-%Y")
=> #<Date: 4918207/2,0,2299161>
>> converted.mday
=> 11
>> converted.month
=> 9
>> converted.year
=> 2001
Pour les autres formats strptime
, voir http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html
De plus, je m'assure toujours de régler mon fuseau horaire de base sur :utc
si mon site Web doit traiter des dates, et d'utiliser Javascript
du côté client pour afficher les heures locales.
Vous pouvez utiliser Time # parse .
Time.parse("20-08-2010")
# => Fri Aug 20 00:00:00 +0200 2010
Cependant, comme Ruby peut analyser la date comme "MM-JJ-AAAA", la meilleure solution consiste à utiliser DateTime # strptime pour spécifier le format de saisie.
Je trouve cette approche plus simple puisqu'elle évite d'avoir à spécifier le format de date pour l'analyseur:
date1 = heure.local (2012, 1, 20, 12, 0, 0) .à_date
Comme ceci, vous pouvez obtenir time Object à partir d'une chaîne comme ceci:
t = Time.parse "9:00 PM"
=> 2013-12-24 21:00:00 +0530
t = Time.parse "12:00 AM"
=> 2013-12-24 00:00:00 +0530
Mais Ruby analyse cela comme une date!
Vous pouvez donc utiliser la colonne comme une chaîne.
add_column :table_name, :from, :string, :limit => 8, :default => "00:00 AM", :null => false
add_column :table_name, :to, :string, :limit => 8, :default => "00:00 AM", :null => false
Et vous pouvez affecter un objet chaîne à l'attribut,
r.from = "05:30 PM"
r.save
Et analyser la chaîne pour obtenir l'objet de temps,
Time.zone.parse("02:00 PM")
Pas nécessaire pour ce format de chaîne particulier, mais le meilleur utilitaire d'analyse de chaîne de temps que je connaisse est Chronic , qui est disponible sous forme de gemme et fonctionne pour environ 99,9% des cas d'utilisation de dates/heures au format humain.