我正在编写一个帮助程序来解析我在CSV中给出的一些日期字符串。问题是它们的格式化方式不一致。有三种不同的格式:
%m%d%Y
)"%Y%m%d"
)以下是我编写的帮助我解析日期的函数。
class DateTimeParser
require "date"
require 'active_support/all'
require 'byebug'
class Object
def blank?
return self == nil || self == ""
end
end
def parse_string_date
date_str = "01021992"
formats = ["%Y%m%d", "%m%d%Y"]
date = nil
formats.each do |form|
begin
date = DateTime.parse(date_str, form)
break
rescue => e
puts "ERROR: #{e}"
puts "Failed for #{date_str} with format #{form}"
end
end
#this should handle the case where the date is just a word (i.e. "PORSCHE")
if date.nil?
date = DateTime.parse("03141994", "%m%d%Y")
end
date = date.change(:offset => "+0500")
puts "Date : #{date}"
end
DateTimeParser.new().parse_string_date
end
如果您想要运行此项并更改date_str
输出:
ERROR: invalid date
Failed for 01021992 with format %Y%m%d
ERROR: invalid date
Failed for 01021992 with format %m%d%Y
我想我的麻烦是我似乎无法确定您可以传递给parse
的正确格式。
答案 0 :(得分:0)
为什么不建立一些模式和模板,而不是随机尝试,
format = FORMATS.find do |rx, _|
rx.match(date_str)
end
format and DateTime.parse(date_str, format[1])
然后您可以尝试以这种方式解码:
MyFileAbsPath.swift:72: Test Case '-[Tests.DoThingTest testPerformance]' measured
[Time, seconds] average: 0.096, relative standard deviation: 89.348%, values:
[0.352850, 0.067076, 0.067139, 0.067347, 0.067608, 0.067030, 0.067298, 0.068089, 0.067496, 0.066790],
performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime,
baselineName: "", baselineAverage: , maxPercentRegression: 10.000%,
maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
您可以添加其他格式,以及放弃的“无论”条件,并按原样返回字符串。