Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby-我需要将字符串转换为时间戳_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 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)&

我需要在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)> 
我需要将其保存到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"