Ruby on rails Ruby-我需要将字符串转换为时间戳
我需要在Ruby中将表示日期的字符串转换为时间戳对象 例如:Ruby on rails Ruby-我需要将字符串转换为时间戳,ruby-on-rails,ruby,Ruby On Rails,Ruby,我需要在Ruby中将表示日期的字符串转换为时间戳对象 例如: date_string = "18-Feb-2016 09:01:04" convert to a timestamp like so 2016-02-18 14:01:04 DateTime.parse "4-5-16 09:01:04" #=> #<DateTime: 2004-05-16T09:01:04+00:00 ((2453142j,32464s,0n),+0s,2299161j)&
date_string = "18-Feb-2016 09:01:04"
convert to a timestamp like so
2016-02-18 14:01:04
DateTime.parse "4-5-16 09:01:04"
#=> #<DateTime: 2004-05-16T09:01:04+00:00 ((2453142j,32464s,0n),+0s,2299161j)>
我需要将其保存到mysql数据库,列的类型为timestamp
我已经研究了一天的大部分时间,并没有找到解决办法。我知道你可以使用Time.parse,但它包括时区和DateTime.parse()。to_Time包括时区。因为它必须是一个时间戳,所以我不能使用strftime方法
我需要包括时间,因为它将用于计算目的
任何帮助都将不胜感激
感谢您在Rails中使用to_datetime方法
"12-10-2015".to_datetime
=>2015年10月12日星期一10:36:00+0000
编辑以添加精确答案
TL;DR
datetime = DateTime.parse("18-Feb-2016 09:01:04").to_s(:db)
返回
"2016-02-18 09:01:04"
这里有一个快速的解释
1。使用DateTime.parse将字符串转换为日期对象
您可以使用Date
或DateTime
类中的.parse
方法来解析字符串。parse方法将返回一个日期对象,如下所示:
$ DateTime.parse("18-Feb-2016 09:01:04")
$ => #<DateTime: 2016-02-18T09:01:04+00:00 ((2457437j,32464s,0n),+0s,2299161j)>
注意:to_s
是从到格式化的
的别名,到格式化的
是Rails提供的方法,而不是Ruby。您可以使用.to_time
或.to_datetime
,.to\u time
返回带时区的日期和时间,但返回带周名的完整日期,但它显示+0000作为时区,您将看到两种格式的差异,请参见以下示例
# used .to_time
"18-Feb-2016 09:01:04".to_time
## Output
2016-02-18 09:01:04 +0530
# used .to_datetime
"18-Feb-2016 09:01:04".to_datetime
## Output
Thu, 18 Feb 2016 09:01:04 +0000
我将问题解释为,您希望将字符串“18-Feb-2016 09:01:04”
转换为字符串“2016-02-18 14:01:04”
(当然,一般化为任意日期时间字符串)
让我们:
你想做的事情分两步完成。第一个是将该字符串转换为DateTime
对象,即类DateTime
的实例。第二步是从DateTime
对象构造所需的字符串
创建DateTime
对象的一种方法是使用以下方法:
你好感谢您的回复,但这似乎是一种rails方法,不适用于普通ruby。对不起,我的错,@amit sharma的回答似乎很有希望。您所说的“时间戳”是什么意思?您说您想要一个“timestamp对象”,但2016-02-18 14:01:04
似乎不是类Time
的实例。或者,您希望通过从Time
对象提取信息来显示的字符串(在这种情况下需要用引号括起来)?小时是如何从09
到14
的?这应该可以做到:DateTime.parse(“18-Feb-2016 09:01:04”)。到(:db)
(见下面的答案)
str = "18-Feb-2016 09:01:04"
require 'date'
DateTime.parse(str)
#=> #<DateTime: 2016-02-18T09:01:04+00:00 ((2457437j,32464s,0n),+0s,2299161j)>
DateTime.parse "4-5-16 09:01:04"
#=> #<DateTime: 2004-05-16T09:01:04+00:00 ((2453142j,32464s,0n),+0s,2299161j)>
pattern = "%d-%m-%y %H:%M:%S"
DateTime.strptime("4-5-16 09:01:04", pattern)
#=> #<DateTime: 2016-05-04T09:01:04+00:00((2457513j,32464s,0n),+0s,2299161j)>
dt = DateTime.strptime(str, "%d-%b-%Y %H:%M:%S")
#=> #<DateTime: 2016-02-18T09:01:04+00:00 ((2457437j,32464s,0n),+0s,2299161j)>
dt.strftime("%Y-%m-%d %H:%M:%S")
#=> "2016-02-18 09:01:04"