Ruby - 我需要将字符串转换为时间戳

时间:2016-02-18 19:08:27

标签: 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

如果列是类型时间戳,我需要将其保存到mysql数据库。

我在一天中的大部分时间都研究了这个,但找不到解决方案。我知道你可以使用Time.parse,但包括timezone和DateTime.parse()。to_time包括时区。由于它必须是时间戳,我不能使用strftime方法。

我需要时间,因为它将用于计算目的。

非常感谢任何帮助。

谢谢

4 个答案:

答案 0 :(得分:4)

  

TL; DR

datetime = DateTime.parse("18-Feb-2016 09:01:04").to_s(:db)
     

返回

"2016-02-18 09:01:04"

这是一个快速解释......

<强> 1。将您的字符串转换为DateTime.parse

的Date对象

您可以使用.parseDate类中的DateTime方法来解析字符串。 parse方法将返回一个Date对象,如下所示:

$ DateTime.parse("18-Feb-2016 09:01:04")
$ => #<DateTime: 2016-02-18T09:01:04+00:00 ((2457437j,32464s,0n),+0s,2299161j)>

.parse是Ruby提供的方法。

<强> 2。使用DateTime.parse.to_s

格式化字符串

Ruby on Rails允许您访问DateTime.to_formatted_s方法,以便在将Date对象存储到数据库之前更改其格式。

要匹配您指定的格式:

$ datetime = DateTime.parse("18-Feb-2016 09:01:04").to_formatted_s

注意:to_sto_formatted_s的别名,to_formatted_s是Rails提供的方法,而不是Ruby。

答案 1 :(得分:1)

在Rails中使用to_datetime方法。

"12-10-2015".to_datetime

=&GT;星期一,2015年10月12日10:36:00 +0000

http://apidock.com/rails/String/to_datetime

编辑以添加精确答案。

答案 2 :(得分:1)

您可以使用.to_time.to_datetime.to_time会返回带有时区的日期和时间,但.to_datetime会返回带有周名称的完整日期,但会显示+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

答案 3 :(得分:1)

我已将问题解释为您希望将字符串"18-Feb-2016 09:01:04"转换为字符串"2016-02-18 14:01:04"(当然,将其推广为任意日期时间字符串)。

让:

str = "18-Feb-2016 09:01:04"

您想要的是分两步完成的。第一种是将此字符串转换为DateTime对象,即类DateTime的实例。第二步是从DateTime对象构造所需的字符串。

创建DateTime对象的一种方法是使用方法DateTime::parse

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)> 

只要您知道将使用的格式,通常最好将DateTime#strptime格式指令组成的适当模式一起使用:

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)> 

有关格式指令,请参阅DateTime#strftime

对于手头的问题:

dt = DateTime.strptime(str, "%d-%b-%Y %H:%M:%S")
  #=> #<DateTime: 2016-02-18T09:01:04+00:00 ((2457437j,32464s,0n),+0s,2299161j)>

第二步是使用上面引用的strftime方法构造所需的字符串:

dt.strftime("%Y-%m-%d %H:%M:%S")
  #=> "2016-02-18 09:01:04"