Ruby 中的 DateTime.parse() 是不是依赖于语言环境?

Posted

技术标签:

【中文标题】Ruby 中的 DateTime.parse() 是不是依赖于语言环境?【英文标题】: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') 【参考方案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

【讨论】:

以上是关于Ruby 中的 DateTime.parse() 是不是依赖于语言环境?的主要内容,如果未能解决你的问题,请参考以下文章

C#中的时间类

DateTime.Parse 和 Convert.ToDateTime 之间有啥区别?

在 DateTime.parse() 中允许空字符串

csharp 用法DateTime.Parse DateTime.ParseExact。今更だけど,稀に迷う时があるのでメモ。

拆分时间段

毫秒数据字符串转换为DateTime