Ruby local_to_utc返回无效年份



我有以下日期字符串('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)>

从文档中,您可以得到关于实际发生的事情的提示:

TZInfo中操作时间的所有方法都可以用于TimeDateTime实例,或者具有整数时间戳(即由Time#to_i返回)。返回值的类型将与传入的类型匹配。

实际发生的是local_to_utc在输入参数上调用to_i,该参数在字符串上返回从字符串开头解析的整数(2014年在您的情况下,因为date是字符串2014-07-07T23:10:00+00:00),并将时差添加到它- 18000为"美国/东部"(5小时差),0UTC:

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的一些令人惊讶的怪癖的编译…

相关内容

  • 没有找到相关文章