我正在尝试将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
,这显然不是我想要的。我想知道是否有人可以按我指定的方式帮助我格式化日期时间对象?
答案 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"