ruby - 在Ruby中将字符串解析为时间(Time.parse)时如何忽略DST
问题描述
我需要用时间戳解析字符串并将它们转换为Time
对象。
我正在努力了解如何Time.parse
工作以及如何忽略 DST 并始终使用UTC
或简单地转换为UTC
当时间从 转换GMT
到时,我一直有重复的小时数DST
。我努力了:
Time.parse(t)
Time.parse(t).utc
Time.strptime(t, "%Y-%m-%d %H:%M:%S")
并且都给出相同的结果。这是我的代码的摘录
require 'time'
ts = ["2010-03-28 00:00:00", "2010-03-28 01:00:00", "2010-03-28 02:00:00", "2010-03-28 03:00:00"]
ts.each do |t|
puts "t: #{t} -- pt: #{Time.parse(t)} -- dst: #{Time.parse(t).dst?} -- utc: #{Time.parse(t).utc} -- strptime: #{Time.strptime(t, "%Y-%m-%d %H:%M:%S")}"
end
输出是:
t: 2010-03-28 00:00:00 -- pt: 2010-03-28 00:00:00 +0000 -- dst: false -- utc: 2010-03-28 00:00:00 UTC -- strptime: 2010-03-28 00:00:00 +0000
t: 2010-03-28 01:00:00 -- pt: 2010-03-28 02:00:00 +0100 -- dst: true -- utc: 2010-03-28 01:00:00 UTC -- strptime: 2010-03-28 02:00:00 +0100
t: 2010-03-28 02:00:00 -- pt: 2010-03-28 02:00:00 +0100 -- dst: true -- utc: 2010-03-28 01:00:00 UTC -- strptime: 2010-03-28 02:00:00 +0100
t: 2010-03-28 03:00:00 -- pt: 2010-03-28 03:00:00 +0100 -- dst: true -- utc: 2010-03-28 02:00:00 UTC -- strptime: 2010-03-28 03:00:00 +0100
地点:英国(如果locale
很重要)
时间:DST
Ruby 2.0.0-p247
开macos
(我不能改变它)
编辑
不确定这是一个 hack,但添加" UTC"
到时间字符串可以解决问题。查看更新的代码:
require 'time'
ts.map{|t| t + " UTC"}.each do |t|
puts "t: #{t} -- pt: #{Time.parse(t)} -- dst: #{Time.parse(t).dst?} -- utc: #{Time.parse(t).utc} -- \
strptime: #{Time.strptime(t, "%Y-%m-%d %H:%M:%S")}"
end
现在的输出是:
t: 2010-03-28 00:00:00 UTC -- pt: 2010-03-28 00:00:00 UTC -- dst: false -- utc: 2010-03-28 00:00:00 UTC -- strptime: 2010-03-28 00:00:00 +0000
t: 2010-03-28 01:00:00 UTC -- pt: 2010-03-28 01:00:00 UTC -- dst: false -- utc: 2010-03-28 01:00:00 UTC -- strptime: 2010-03-28 02:00:00 +0100
t: 2010-03-28 02:00:00 UTC -- pt: 2010-03-28 02:00:00 UTC -- dst: false -- utc: 2010-03-28 02:00:00 UTC -- strptime: 2010-03-28 02:00:00 +0100
t: 2010-03-28 03:00:00 UTC -- pt: 2010-03-28 03:00:00 UTC -- dst: false -- utc: 2010-03-28 03:00:00 UTC -- strptime: 2010-03-28 03:00:00 +0100
当然,最后一次解析 withstrptime
是错误的,因为它忽略了UTC
.
解决方案
推荐阅读
- reactjs - 标签未加载 CodeSandbox.io
- php - 获取关联数组的值 [PHP]
- python - 如何在没有while循环的情况下重复输入?
- notepad++ - 如何在 Notepad++ 或 Sublime Text 中以特定颜色设置特定语言
- html - 模态在 HTML 上显示为灰色
- javascript - 如何使用 JSON.parse() 将数据提取到部件中
- python-3.x - 使用纸浆python进行优化
- swift - 无法在 Swift 中将 TimeInterval 1589485565000 转换为日期
- javascript - 如何从数组上的 forEach 方法获取结果?
- azure-sql-database - 什么可能导致我的 SQL Azure 数据库出现间歇性 LOG IO 峰值?