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() 是不是依赖于语言环境?的主要内容,如果未能解决你的问题,请参考以下文章
DateTime.Parse 和 Convert.ToDateTime 之间有啥区别?
csharp 用法DateTime.Parse DateTime.ParseExact。今更だけど,稀に迷う时があるのでメモ。