L'API flickr fournit une date postée sous la forme du timestamp unix: "The posted date is always passed around as a unix timestamp, which is an unsigned integer specifying the number of seconds since Jan 1st 1970 GMT.
"
Par exemple, voici la date '1100897479
'. Comment le formater avec Ruby sur Rails?
Une fois que vous avez analysé la chaîne timestamp et que vous avez un objet time (voir les autres réponses pour plus de détails), vous pouvez utiliser Time.to_formatted_s à partir de Rails. Il a plusieurs formats intégrés que vous pouvez spécifier avec des symboles.
Citation:
time = Time.now # => Thu Jan 18 06:10:17 CST 2007
time.to_formatted_s(:time) # => "06:10"
time.to_s(:time) # => "06:10"
time.to_formatted_s(:db) # => "2007-01-18 06:10:17"
time.to_formatted_s(:number) # => "20070118061017"
time.to_formatted_s(:short) # => "18 Jan 06:10"
time.to_formatted_s(:long) # => "January 18, 2007 06:10"
time.to_formatted_s(:long_ordinal) # => "January 18th, 2007 06:10"
time.to_formatted_s(:rfc822) # => "Thu, 18 Jan 2007 06:10:17 -0600"
(Time.to_s est un alias)
Vous pouvez également définir vos propres formats - généralement dans un initialiseur (Merci à Dave Newton pour l'avoir signalé). Voici comment cela se fait:
# config/initializers/time_formats.rb
Time::DATE_FORMATS[:month_and_year] = "%B %Y"
Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
Voici ma réponse à cette question,
donc vous devez d’abord convertir l’horodatage en un Ruby Date/Heure) réel. Si vous le recevez sous la forme d’une chaîne ou d’un int de facebook, vous devrez procéder de la manière suivante:
my_date = Time.at(timestamp_from_facebook.to_i)
OK, alors supposons que vous ayez déjà votre objet de date ...
to_formatted_s est une fonction pratique Ruby) qui convertit les dates en chaînes de caractères formatées.
Voici quelques exemples d'utilisation:
time = Time.now # => Thu Jan 18 06:10:17 CST 2007
time.to_formatted_s(:time) # => "06:10"
time.to_s(:time) # => "06:10"
time.to_formatted_s(:db) # => "2007-01-18 06:10:17"
time.to_formatted_s(:number) # => "20070118061017"
time.to_formatted_s(:short) # => "18 Jan 06:10"
time.to_formatted_s(:long) # => "January 18, 2007 06:10"
time.to_formatted_s(:long_ordinal) # => "January 18th, 2007 06:10"
time.to_formatted_s(:rfc822) # => "Thu, 18 Jan 2007 06:10:17 -0600"
Comme vous pouvez le constater: : db,: number,: short ... sont des formats de date personnalisés.
Pour ajouter votre propre format personnalisé, vous pouvez créer ce fichier: config/initializers/time_formats.rb et ajoutez vos propres formats, par exemple:
Date::DATE_FORMATS[:month_day_comma_year] = "%B %e, %Y" # January 28, 2015
Où : month_day_comma_year est le nom de votre format (vous pouvez le changer en tout ce que vous voulez), et où % B% e,% Y correspond au format de date Unix.
Voici une brève feuille de calcul sur la syntaxe de date Unix, afin que vous puissiez rapidement configurer votre format personnalisé:
From http://linux.die.net/man/3/strftime
%a - The abbreviated weekday name (``Sun'')
%A - The full weekday name (``Sunday'')
%b - The abbreviated month name (``Jan'')
%B - The full month name (``January'')
%c - The preferred local date and time representation
%d - Day of the month (01..31)
%e - Day of the month without leading 0 (1..31)
%g - Year in YY (00-99)
%H - Hour of the day, 24-hour clock (00..23)
%I - Hour of the day, 12-hour clock (01..12)
%j - Day of the year (001..366)
%m - Month of the year (01..12)
%M - Minute of the hour (00..59)
%p - Meridian indicator (``AM'' or ``PM'')
%S - Second of the minute (00..60)
%U - Week number of the current year,
starting with the first Sunday as the first
day of the first week (00..53)
%W - Week number of the current year,
starting with the first Monday as the first
day of the first week (00..53)
%w - Day of the week (Sunday is 0, 0..6)
%x - Preferred representation for the date alone, no time
%X - Preferred representation for the time alone, no date
%y - Year without a century (00..99)
%Y - Year with century
%Z - Time zone name
%% - Literal ``%'' character
t = Time.now
t.strftime("Printed on %m/%d/%Y") #=> "Printed on 04/09/2003"
t.strftime("at %I:%M%p") #=> "at 08:56AM"
J'espère que cela vous a aidé. J'ai également fait un github Gist de ce petit guide, au cas où quelqu'un le préférerait.
Le plus simple est d'utiliser strftime
(docs) .
Si c'est pour une utilisation du côté de la vue, il vaut mieux l'envelopper dans une aide, cependant.
@ La réponse de CMW est un coup sur l’argent. J'ai ajouté cette réponse comme exemple de configuration d'un initialiseur de sorte que les objets Date et Heure obtiennent le formatage.
config/initializers/time_formats.rb
date_formats = {
concise: '%d-%b-%Y' # 13-Jan-2014
}
Time::DATE_FORMATS.merge! date_formats
Date::DATE_FORMATS.merge! date_formats
De plus, les deux commandes suivantes parcourent tous les DATE_FORMATS
dans votre environnement actuel et affichez la date et l'heure du jour dans chaque format:
Date::DATE_FORMATS.keys.each{|k| puts [k,Date.today.to_s(k)].join(':- ')}
Time::DATE_FORMATS.keys.each{|k| puts [k,Time.now.to_s(k)].join(':- ')}
Vous devez d’abord convertir l’horodatage en un Ruby Date/heure) réel. Si vous le recevez sous la forme d’une chaîne ou d’un message int de Facebook, vous devrez procéder de la manière suivante:
my_date = Time.at(timestamp_from_facebook.to_i)
Ensuite, pour le formater correctement dans la vue, vous pouvez simplement utiliser to_s
(pour la mise en forme par défaut):
<%= my_date.to_s %>
Notez que si vous ne mettez pas to_s
, il sera toujours appelé par défaut si vous l’utilisez dans une vue ou dans une chaîne, par exemple. le suivant appellera également to_s
à la date:
<%= "Here is a date: #{my_date}" %>
ou si vous souhaitez que la date soit formatée de manière spécifique (par exemple, en utilisant "d/m/Y") - vous pouvez utiliser strftime
comme indiqué dans l'autre réponse.
Les horodatages étant exprimés en secondes depuis l’époque UNIX, vous pouvez utiliser DateTime.strptime ("durée d’analyse de chaîne") avec le spécificateur correct:
Date.strptime('1100897479', '%s')
#=> #<Date: 2004-11-19 ((2453329j,0s,0n),+0s,2299161j)>
Date.strptime('1100897479', '%s').to_s
#=> "2004-11-19"
DateTime.strptime('1100897479', '%s')
#=> #<DateTime: 2004-11-19T20:51:19+00:00 ((2453329j,75079s,0n),+0s,2299161j)>
DateTime.strptime('1100897479', '%s').to_s
#=> "2004-11-19T20:51:19+00:00"
Notez que vous devez require 'date'
pour que cela fonctionne, vous pouvez l’appeler soit comme Date.strptime
(si vous vous souciez seulement de la date) ou DateTime.strptime
(si vous voulez la date et l'heure). Si vous avez besoin d'une mise en forme différente, vous pouvez appeler DateTime # strftime (regardez strftime.net si vous avez du mal à utiliser les chaînes de format) ou utilisez l'une des options suivantes: méthodes intégrées comme rfc822
.