如何在Ruby中将YYYY-MM-DDTHH:MM:SSZ时间格式转换为MM/DD/YYYY时间格式?

如何在Ruby中将YYYY-MM-DDTHH:MM:SSZ时间格式转换为MM/DD/YYYY时间格式?,ruby,datetime,Ruby,Datetime,例如,我试图将2011-01-19T00:00:00Z转换为2011年1月19日。最简单的方法是什么?您可以使用Ruby Time对象解析时间和日期,然后重新格式化时间和日期: require 'time' time = Time.strptime("2011-01-19T00:00:00Z", "%Y-%m-%dT%H:%M:%SZ") time.strftime("%m/%d/%Y") => 01/19/2011 需要“时间” time=time.strtime(“2011-01-19T00

例如,我试图将2011-01-19T00:00:00Z转换为2011年1月19日。最简单的方法是什么?

您可以使用Ruby Time对象解析时间和日期,然后重新格式化时间和日期:

require 'time' time = Time.strptime("2011-01-19T00:00:00Z", "%Y-%m-%dT%H:%M:%SZ") time.strftime("%m/%d/%Y") => 01/19/2011 需要“时间” time=time.strtime(“2011-01-19T00:00:00Z”,%Y-%m-%dT%H:%m:%SZ”) time.strftime(“%m/%d/%Y”) => 01/19/2011 如果要考虑时区,请使用此行:

time = Time.strptime("2011-01-19T00:00:00Z", "%Y-%m-%dT%H:%M:%S%z") time=time.strtime(“2011-01-19T00:00:00Z,%Y-%m-%dT%H:%m:%S%z”)
您可以使用
Time.parse
将这样的时间字符串解析为
Time
对象。然后,您可以使用
strftime
将其转换为您喜欢的任何字符串格式:

require 'time'
Time.parse("2011-01-19T00:00:00Z").strftime("%m/%d/%Y")
#=> "01/19/2011"

我认为硬编码Z不一定是个好主意。如果他在另一个时区有时间怎么办?同样,通过这种方式,Time对象将位于本地时区,而不是z-Time(在本例中它并不重要)。我进行了修改以考虑时区。另一个注意事项:在ruby 1.8中,您必须使用
DateTime
而不是
Time
,因为
Time
直到1.9才有
strtime
方法(无论出于什么原因)。说得好,但我认为DateTime只在ActiveSupport中定义。@潘:不,它不是。它是标准的ruby(当
需要“date”
时,您就可以得到它)。ActiveSupport只是在其中添加了一系列方法。通常使用Time.parse的问题是时间格式可能会混淆。例如:“01/09/2011”可以是两个不同的日期。当您知道时间格式时,最好使用strtime,因为您可以确保得到的结果是正确的。@潘:这是一个很好的观点,但是通过
parse
可以很好地处理此特定格式(尽管我认为明确说明格式将是一种很好的做法)。当你的日期格式永远不会改变时,显式是很好的。只要他们做了你的代码的splodes。@theTin:但公平地说,
时间。如果格式改变,解析也会爆炸。或者更糟的是:它可能返回错误的结果。是的,但我不会花费所有的精力试图智胜问题,而只是为了让它返回一个错误的结果别理我,我讨厌这种事发生!