将格式从mySQL日期时间格式更改为ruby中的其他类型?

时间:2016-06-10 19:04:37

标签: ruby datetime

我正在尝试将SQL日期时间变量(2016-06-09 14:29:34)更改为这样的格式(00:00_20160601)。我试图遵循一些允许我格式化Time对象的SO questions

这是我到目前为止所做的:

start_datetime = "2016-06-09 14:29:34"
t =Time.new(start_datetime)
t.strftime("%H:%M_%Y%d%m")

这导致时间格式化为2016-01-01 00:00:00 +0000,这显然不是我想要的。我想知道是否有人可以按我指定的方式帮助我格式化日期时间对象?

2 个答案:

答案 0 :(得分:2)

您可以使用DateTime

执行此操作
require 'datetime'

DateTime.parse("2016-06-09 14:29:34").strftime("%H:%M_%Y%d%m")
#=> "14:29_20160906"

您输入的格式基本上是ISO-8601,因此默认情况下会对其进行解析。

将该值提供给Time.new是完全错误的。第一个参数是年份,其余的必须单独提供。这就是为什么你得到2016-01-01,因为其他一切都是默认的。

Time.new正在自动转换,"2016-06-09 14:29:34".to_i的结果为2016

答案 1 :(得分:0)

为什么你的日期值从输入中的09变为所需输出中的01并不完全清楚,所以我会使用正常的东西并输出相同的内容正如输入:

require 'time'

start_datetime = "2016-06-09 14:29:34"
t = Time.strptime(start_datetime, '%Y-%m-%d %H:%M:%S')
t.strftime('00:00_%Y%m%d') # => "00:00_20160609"

由于小时和分钟被扔掉,还有其他几种方法可以解决这个问题。

在解析时忽略小时和分钟:

t = Time.strptime(start_datetime, '%Y-%m-%d')

或使用Date对象而不是Time对象:

require 'date'

start_datetime = "2016-06-09 14:29:34"
t = Date.strptime(start_datetime, '%Y-%m-%d')
t.strftime('00:00_%Y%m%d') # => "00:00_20160609"