我正在使用Rails。我已经使用hstore在postgres数据库中按月存储了一个计数。
存储的哈希格式如下:
{" 2017-03-01 00:00:00 UTC" =>" 10"," 2017-04-01 00:00:00 UTC&# 34; =>" 3"}
由于密钥使用的日期格式,我很难找到从此哈希中检索特定月份计数的好方法。
问题
格式化字符串以匹配当前哈希键日期格式的最佳方法是什么?
例如3月份在哈希中,关键是" 2017-03-01 00:00:00 UTC"
但是,2017年3月1日的新DateTime格式为" 2017-03-01T00:00:00 + 00:00"
或者最好是首先更改我存储哈希的格式?
答案 0 :(得分:0)
如果您需要特定格式的时间戳,则使用的标准工具是DateTime#strftime
(所有时间类都将采用strftime
方法,并且它们的行为都相同)。在你的情况下:
some_datetime.utc.strftime('%Y-%m-%d %H:%M:%S %Z')
将其挂钩到ActiveRecord:
Model.where('your_hstore -> :key', :key => some_datetime.utc.strftime('%Y-%m-%d %H:%M:%S %Z'))
或者:
Model.where('your_hstore -> ?', some_datetime.utc.strftime('%Y-%m-%d %H:%M:%S %Z'))
%Z
应为“时区缩写名称”,对我而言,它会生成'UTC'
,'PDT'
等字符串,如果您的strftime
(几乎可以肯定)只是系统的strftime
的libc版本的包装器不会产生你想要的字符串然后你有一些选择:
2017-03-01 00:00:00
,您可以使用'%Y-%m-%d %H:%M:%S'
作为strftime
格式字符串。2017-03-01
,你在Ruby而不是Date
中使用DateTime
个实例,你会说some_date.strftime('%Y-%m-%d')
或some_date.iso8601
Ruby来获取你的hstore密钥。%z
格式字符串中的%:z
,%::z
或strftime
(请参阅这三者之间差异的文档)。这些当然需要重新处理您在数据库中已有的任何数据,但最好是尽快完成。