gpt4 book ai didi

Ruby local_to_utc 返回无效年份

转载 作者:太空宇宙 更新时间:2023-11-03 18:16:56 25 4
gpt4 key购买 nike

我有以下日期字符串('US/Eastern'),我需要将其转换为 UTC:

date_src = '2014-07-07T23:10:00+0'

首先,我将其转换为“有效”格式,以便我可以在以后的进程中对其进行操作。我使用以下方法获取日期的 iso 版本:

date = DateTime.parse(date_src).iso8601

此时日期是一个不错的'2014-07-07T23:10:00+00:00'。我流程的最后一步是将此日期转换为 UTC。我正在使用以下内容:

TZInfo::Timezone.get('US/Eastern').local_to_utc(date)

问题是这给我 20014 作为输出,而不是原始日期的 UTC 版本。如果我尝试:

TZInfo::Timezone.get('UTC').local_to_utc(date)

我得到了 2014,这是正确的年份,但仍然是意外的输出。

关于我做错了什么以及我可以用什么来解决问题有什么想法吗?

最佳答案

local_to_utc 实际上需要一个 TimeDateTime 实例:

TZInfo::Timezone.get('US/Eastern').local_to_utc(DateTime.parse(date_src))
# => #<DateTime: 2014-07-08T03:10:00+00:00 ((2456847j,11400s,0n),+0s,2299161j)>

从文档中,您可以了解实际发生的事情:

All methods in TZInfo that operate on a time can be used with either Time or DateTime instances or with nteger timestamps (i.e. as returned by Time#to_i). The type of the values returned will match the the type passed in.

实际发生的是 local_to_utc 在输入参数上调用 to_i,它在字符串上从字符串的开头返回解析后的整数(在你的例子中是 2014 年以来date 是字符串 2014-07-07T23:10:00+00:00), 加上时差 - 18000 为“美国/东部”(5 小时时差),0 UTC:

date.to_i
# => 2014

TZInfo::Timezone.get('US/Eastern').local_to_utc(date) - date.to_i
# => 18000

TZInfo::Timezone.get('UTC').local_to_utc(date) - date.to_i
# => 0

所以最重要的是 - 有点偶然,你看到了这种奇怪的行为,它源于你使用的 API 的一些令人惊讶的怪癖的汇编......

关于Ruby local_to_utc 返回无效年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com