【问题标题】:Is DateTime.parse() in Ruby dependent on locale?Ruby 中的 DateTime.parse() 是否依赖于语言环境?
【发布时间】:2014-04-24 07:42:01
【问题描述】:

我想知道以下示例的输出: 解析01/03时,会解析为Mar, 1st还是Jan, 3rd

【问题讨论】:

  • 我很确定这是确定性,是的。解析函数中的rand 调用会很奇怪。 ;-)
  • @deceze 谢谢,已修复。不确定我是否已将问题表述为“最佳”:) 实际上,一些 rand() 实现也可以是确定性的。
  • 如果它只是 01/03 则在 Date 解析时它返回 2014-01-03 并且 date.month 返回 1。而如果它是 01/03/yyyy 那么 Date.parse 返回 yyyy-03 -01 和 date.month 返回 3
  • Ruby 没有任何与语言环境相关的变量,所以不可能。
  • 如果您知道订单请使用DateTime.strptime('01/03', '%d/%m')

标签: ruby datetime datetime-format


【解决方案1】:

Ruby 不依赖于语言环境。因为 Ruby 是一种服务器端 语言,而不是像 JavaScript 这样的 客户端 语言,Ruby 使用来自 您的 Web 应用服务器的系统时钟 -并使用此信息来计算时间。无论您将系统设置为哪个时区,您的 Ruby 应用都将使用该时区。

从字符串中解析日期时,DateTime 将根据输入的格式做出最佳猜测:

DateTime.parse('01/03')
#=> Thu, 03 Jan 2019 00:00:00 +0000

DateTime.parse('2019/01/03')
#=> Thu, 03 Jan 2019 00:00:00 +0000

DateTime.parse('01/03/2019')
#=> Fri, 01 Mar 2019 00:00:00 +0000

您还可以明确告诉 DateTime 使用strptime 解析字符串的方式:

date = '01-03-2019'

DateTime.strptime(date, '%m-%d-%Y')
#=> Thu, 03 Jan 2019 00:00:00 +0000

DateTime.strptime(date, '%d-%m-%Y')
#=> Fri, 01 Mar 2019 00:00:00 +0000

【讨论】:

    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2022-01-26
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多