Ruby 将日期转换为历元时使用strtime、strftime时出错

Ruby 将日期转换为历元时使用strtime、strftime时出错,ruby,datetime,Ruby,Datetime,我试图从csv文件中提取日期,并将其转换为历元时间 CSV.foreach(File.path("month.csv")) do |row| dateper=row[0].split(',')[0] p DateTime.strptime(dateper,"%m/%d/%y %I:%M:%S %p %z").strftime("%s") end 我得到的结果是无效的日期(ArgumentError)。然而,如果我打印出dateper,随机选择其中一个输出,并将其粘贴到第3行的datepe

我试图从csv文件中提取日期,并将其转换为历元时间

CSV.foreach(File.path("month.csv")) do |row|
 dateper=row[0].split(',')[0] 
 p DateTime.strptime(dateper,"%m/%d/%y %I:%M:%S %p %z").strftime("%s")
end
我得到的结果是无效的日期(ArgumentError)。然而,如果我打印出dateper,随机选择其中一个输出,并将其粘贴到第3行的dateper位置,我会得到一个历元值。我做错了什么?dateper是字符串值,strtime减去strftime似乎会给出一个输出

month.csv示例:

2013年7月26日12:00:00上午-05:00,62.2,63.02,62.07,63.02,5.00168E+07
2013年8月23日12:00:00上午-05:00,71.84,71.93,71.36,71.6,5.55304E+07
2013年8月26日12:00:00上午-05:00,71.56,72.91,71.52,71.87,8.26536E+07
2013年8月27日12:00:00上午-05:00,71.16,71.81,69.49,69.82,1.058488E+08


有人能帮我一下吗?

你在什么地方有一些错误的日期。使用
rescue
避免脚本被它们卡住

CSV.foreach(File.path("month.csv")) do |row|
 dateper=row[0].split(',')[0] 
 p DateTime.strptime(dateper,"%m/%d/%y %I:%M:%S %p %z").strftime("%s") rescue p "malformed date:#{dateper} on line #{$.}"
end

这将允许脚本继续并向您显示错误的日期。

您在某处有一些格式错误的日期。使用
rescue
避免脚本被它们卡住

CSV.foreach(File.path("month.csv")) do |row|
 dateper=row[0].split(',')[0] 
 p DateTime.strptime(dateper,"%m/%d/%y %I:%M:%S %p %z").strftime("%s") rescue p "malformed date:#{dateper} on line #{$.}"
end

这将允许脚本继续并向您显示错误日期。

您能从CSV中给出几行吗?理想的,您找到的行不起作用?在您的
dateper=…
声明后放置
Put dateper
,以查看它是否与您认为应该是的内容匹配。@Amadan:CSV的一行有7/26/13 12:00:00 AM-05:00,62.2,63.02,62.07,63.02,5.00168E+07更多行看起来像8/23/13 12:00:00 AM-05:00,71.84,71.93,71.36,71.6,5.55304E+07 8/26/13 12:00-05:00,71.56,72.91,71.52,71.87,8.26536E+07 8/27/13 12:00-05:00,71.16,71.81,69.49,69.82,1.058488E+08@Beartechp dateper将“7/13/15 12:00:00 AM-05:00”作为众多日期中的一个。如果dateper将其作为众多日期中的一个,则意味着您的代码适用于多行。出错前打印的最后一行是什么?我想你的日期格式不好。你能从CSV中拿出几行吗?理想的,您找到的行不起作用?在您的
dateper=…
声明后放置
Put dateper
,以查看它是否与您认为应该是的内容匹配。@Amadan:CSV的一行有7/26/13 12:00:00 AM-05:00,62.2,63.02,62.07,63.02,5.00168E+07更多行看起来像8/23/13 12:00:00 AM-05:00,71.84,71.93,71.36,71.6,5.55304E+07 8/26/13 12:00-05:00,71.56,72.91,71.52,71.87,8.26536E+07 8/27/13 12:00-05:00,71.16,71.81,69.49,69.82,1.058488E+08@Beartechp dateper将“7/13/15 12:00:00 AM-05:00”作为众多日期中的一个。如果dateper将其作为众多日期中的一个,则意味着您的代码适用于多行。出错前打印的最后一行是什么?我想你的日期格式不好。谢谢你的输入,这很有帮助:)谢谢你的输入,这很有帮助:)