Recibí la siguiente entrada del usuario 'Mié, 02 de noviembre de 2016 a las 19:00:00'. ¿Cómo puedo dividir esta cadena de fecha y hora y colocarla en variables con ruby? ¿Cómo puedo obtener la misma cadena de las variables entonces?

Miro tirar regexp y date docs en ruby. Intenté escribir algo:

require 'date'

puts DateTime.strftime('Wed, 02 Nov 2016 19:00:00', '%a, %d %b %y %H:%M:%S')

Tengo el error

test-2.rb:17:in `<main>': undefined method `strftime' for DateTime:Class (NoMethodError)
Did you mean?  strptime
               _strptime 
0
Alexandr Krivosheev 23 dic. 2016 a las 19:59

3 respuestas

La mejor respuesta

Analizar un objeto de tiempo

Este código extrae un objeto Time y lo convierte nuevamente en una cadena de fecha, hora y date_time.

require 'time'

time = Time.parse("Wed, 02 Nov 2016 19:00:00")

date_str     = time.strftime('%a, %d %b %Y')    #=> "Wed, 02 Nov 2016"
time_str     = time.strftime('%T')              #=> "19:00:00"
datetime_str = time.strftime('%a, %d %b %Y %T') #=> "Wed, 02 Nov 2016 19:00:00"

Dividir la cuerda directamente

Si no necesita un objeto Time, simplemente puede dividir la cadena alrededor del último espacio:

date, time = "Wed, 02 Nov 2016 19:00:00".split(/ (?=\S+$)/)
date # => "Wed, 02 Nov 2016"
time # => "19:00:00"
0
Eric Duminil 23 dic. 2016 a las 17:39
require 'time'

time = Time.parse("Wed, 02 Nov 2016 19:00:00")

p time #2016-11-02 19:00:00 +0000  
p time.day #2
p time.month #11
p time.year #2016

Puede analizar el tiempo de esta manera solicitando el tiempo del módulo. Tomará la fecha de cadena proporcionada por el usuario y la convertirá en una fecha y hora reales reconocidas por ruby. Luego, puede utilizar los métodos integrados que proporciona el módulo de tiempo y almacenar esos datos en variables. Espero haber respondido a tu pregunta.

0
kparekh01 23 dic. 2016 a las 17:16
 irb(main):001:0> require 'time'
=> true
irb(main):002:0> dt = DateTime.parse('Wed, 02 Nov 2016 19:00:00')
=> #<DateTime: 2016-11-02T19:00:00+00:00 ((2457695j,68400s,0n),+0s,2299161j)>
irb(main):003:0> dt_date = dt.strftime('%Y/%m/%d')
=> "2016/11/02"
irb(main):004:0> dt_time = dt.strftime('%H:%M:%S')
=> "19:00:00"
irb(main):005:0>
0
JLB 23 dic. 2016 a las 17:13