当前位置: 首页 > 知识库问答 >
问题:

如何在Ruby中将UTC转换为EST/EDT?

萧元徽
2023-03-14

如何在Ruby中将格式为< code > ' 2009-02-02 00:00:00 ' 的UTC时间戳转换为EST/EDT?注意,我没有使用Rails,而是一个简单的Ruby脚本。

1如果日期范围介于 EST(通常是 1 月至 3 月中旬)之间,则需要 UTC-5 小时。对于EDT,它是UTC-4小时。

到目前为止,我有以下功能将UTC转换为EST/EDT。

def utc_to_eastern(utc)
    eastern = Time.parse(utc) # 2009-02-02 00:00:00 -0500
    offset_num = eastern.to_s.split(" -")[1][1].to_i # 5
    eastern_without_offset = (eastern-offset_num*60*60).strftime("%F %T") # 2009-02-01 19:00:00
    return eastern_without_offset
end

puts utc_to_eastern("2009-02-02 00:00:00") # 2009-02-01 19:00:00
puts utc_to_eastern("2009-04-02 00:00:00") # 2009-04-01 20:00:00

上面的代码做了我想要的,但是我的解决方案有两个问题:

  1. 我不想重新发明轮子,这意味着我不想编写时间转换功能,而是使用Ruby提供的现有方法。有没有更直观的方法来做到这一点
  2. 解析使用我的本地时区将UTC转换为EST/EDT,但是我想明确定义时区转换(“America/New_York”)。因为这意味着在中央时间的机器上运行此命令的人不会使用EST/EDT

共有1个答案

欧阳洲
2023-03-14

最好的方法是使用TZInfo。

require 'tzinfo'
require 'time'

def utc_to_eastern utc
  tz = TZInfo::Timezone.get("America/New_York")
  tz.to_local(Time.parse(utc)).strftime('%Y-%m-%d %H:%M:%S')
end

utc_to_eastern "2020-02-02 00:00:00 UTC" => "2020-02-01 19:00:00"
utc_to_eastern "2020-04-02 00:00:00 UTC" => "2020-04-01 20:00:00"
 类似资料:
  • 我需要转换一个日期列,数据库中的日期正好偏离了5个小时。时间保持为UTC,当他们查看应用程序时,它会显示EST时区。应用程序自动转换时间。UTC比东部标准时间提前了5秒。以下代码似乎为大多数时间戳固定了时间和日期,但是,有没有办法设置和偏移?报告回顾一天,并应将转换后的UTC时间返回到EST时间。

  • 我尝试编写一个类来从UTC转换为EST时区。此外,我只想存储日期部分。它工作正常。现在我正在寻找dateFromUtcToJavaTimeZone方法的各种JUnit测试用例。你能给我一些建议吗?

  • 我们在本地时区(如EST、PST、CST等)的sql中有多列。我们希望将UTC时区中的所有这些时区转换为考虑到日光节省并将其保存到另一列。 我尝试了下面的查询,但它将UTC转换为当地时区(EST ),但我正在寻找EST到UTC时区。 选择CONVERT(日期时间,SWITCHOFFSET(日期时间字段,日期部分(TZOFFSET,时间区域“东部标准时间”的日期时间字段))

  • 我是PostgreSQL的新手,我想知道是否有一种直接的方法可以使用函数将表中的时间戳值转换为不同的时区。在我的情况下,是UTC到EST。 例如,我需要将这些值转换为EST(不仅仅是一个值,而是表中的所有值)

  • 问题内容: 我需要有关此java方法的一些建议。此方法的目的是采用表示日期的字符串-该字符串是从EST时区中的日期创建的-并将其转换为UTC时区中的java Date对象。 我看到的问题是dt的值似乎已关闭。例如,如果dateString为‘10 / 16/2012 12:06 PM’-我期望dt(以UTC为单位)的值类似于“ 2012年10月16日,星期二,下午4:06”。取而代之的是,dt的值

  • 我有一个以 UTC 时区存储交易日期时间的表。我需要将此时间转换为东部时区,即美国东部时间或美国东部夏令时,具体取决于交易日期。 如何在不编写大函数或创建为每个交易日期标记 EST / EDT 的表/视图的情况下执行此操作?