【问题标题】:Ruby gem spreadsheet returning dates as doublesRuby gem 电子表格以双精度形式返回日期
【发布时间】:2015-08-08 15:30:37
【问题描述】:

我有一个方法,它通过一个 Excel 电子表格运行,并将这些值放入一个数组中,然后放入 PostgreSQL。一切运行良好,但保存日期的单元格值作为双精度值返回。如何获取日期值?另外,如果我不知道日期值何时会出现在 excel 电子表格中,并且我希望我的方法仅在日期而不是另一个双精度时将双精度转换为日期。

【问题讨论】:

  • 如果它们是整数而不是双精度数,那么它们是“日期”,如果它们是双精度数,那么它们就是日期和时间。这是因为 Excel 以序列化格式存储 DateTimes,它表示 dddd.tttt,其中 dddd 是自 1900 年 1 月 0 日以来的天数,而 tttt 是 24 小时天的小数部分。您最好的选择可能是将它们转换为 Excel 文件中的字符串,然后通过 DateTime 解析字符串。

标签: ruby excel postgresql gem spreadsheet


【解决方案1】:

@engineersmnky 评论和这篇文章帮助我弄清楚了。 How to convert MS excel date from float to date format in Ruby?

require 'date'
require 'active_support/time'
puts (DateTime.new(1899,12,30) + 42153.days).strftime("%Y-%m-%d")
puts (Time.at( (42153 - 25569).days ).utc).strftime("%Y-%m-%d")

这些解决方案中的任何一个都有效。基本上,excel 将日期存储为双精度数,然后您从 excel 给您的双精度数中减去一个设定的数字并将其转换为天数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多