【问题标题】:Ruby: get TimeZone component of stringRuby:获取字符串的 TimeZone 组件
【发布时间】:2015-03-27 17:54:08
【问题描述】:

我正在使用 Ruby 中的日期字符串,并想确定字符串是否与时区一起传递(除了简单地解析文本之外)。如果没有提供时区,我想根据其他因素将其转换为某个时区。

例子:

DateTime.parse("2014-01-01T23:59:00")
=> #<DateTime: 2014-01-01T23:59:00+00:00 ((2456659j,86340s,0n),+0s,2299161j)>
DateTime.parse("2014-01-01T23:59:00Z")
=> #<DateTime: 2014-01-01T23:59:00+00:00 ((2456659j,86340s,0n),+0s,2299161j)>
DateTime.parse("2014-01-01T23:59:00PST")
=> #<DateTime: 2014-01-01T23:59:00-08:00 ((2456660j,28740s,0n),-28800s,2299161j)>

问题在于,当一个指定“Zulu”而另一个指定“Zulu”时,解析“2014-01-01T23:59:00”和“2014-01-01T23:59:00Z”(使用 Zulu)会产生相同的结果不是。如果没有提供区域,我确定默认行为是假定 UTC。

【问题讨论】:

  • Z 和 UTC 不是同一个时区吗?我不明白这个问题
  • 是的,但我想确定一个字符串何时不指定任何时区('Z' 或其他)
  • 知道了,您是否假设输入始终采用 ISO 8601 格式?
  • 我会假设,正确。我意识到我可以只使用 .end_with?但我想知道是否有更优雅的方式。

标签: ruby-on-rails ruby date datetime


【解决方案1】:

要检查日期字符串是否以时区结尾,您可以使用以下正则表达式检查分钟和秒是否是字符串的结尾:\d{2}:\d{2}$

以下是一些使用 debuggex 的例子来说明:

\d{2}:\d{2}$

Debuggex Demo

【讨论】:

    猜你喜欢
    • 2019-11-19
    • 2013-03-20
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多