【问题标题】:I need help understanding this date format [duplicate]我需要帮助理解这种日期格式[重复]
【发布时间】:2019-10-04 08:32:09
【问题描述】:

我有一个包含日期列的 csv 文件,但我在尝试找出该日期的格式时遇到了麻烦。

我尝试了几个时间戳转换器,但似乎都没有给我准确的日期。

日期应在 2017 年以内。

【问题讨论】:

标签: date datetime iso


【解决方案1】:

Excel 将日期和时间作为浮点数存储为自 1900/01/01 00:00:00 以来的天数。所以 42954.49986111111 代表 2017-08-07 11:59:48.0000000。

.Net 已经可以理解这种“格式”了:

DateTime.FromOADate(42954.49986111111);

【讨论】:

    【解决方案2】:

    看起来这是从 1900 年开始的几天,所以要获得时间戳,您应该将此值添加到 1900/01/01 时间戳乘以 1000 * 24 * 60 * 60

    它应该可以工作

    const d = Date.UTC(1900, 1, 1) + 24 * 3600 * 1000 * 42982
    console.log(new Date(d).toString())
    

    【讨论】:

    • 或者只是DateTime.FromOADate()
    • @phuzi 不知道这个方法,当然更短了
    • 请注意,此方法不适用于 1899 年 12 月 30 日之前的日期。OA 日期数字表示天的整数部分和小数部分的小数部分。即 3.5 将是 1899 年 12 月 30 日之后的 3 天 12 小时。当应用于负数时,负数仅适用于整数部分。所以 -2.5 表示 1899 年 12 月 30 日之前的 2 天加上半天,这意味着它只是提前了 1.5 天,而不是 2.5 天。
    【解决方案3】:

    我认为它是任何日期格式。

    moment(42954.4998611111).format('MMMM Do YYYY, h:mm:ss a')
    "January 1st 1970, 5:30:42 am"
    

    【讨论】:

    • 甚至不接近正确!这是如何被接受的答案。这将转换为自 1970-01-01T00:00:00 以来的秒数
    • 42954.4998611111 是不是日期?
    • 当你点击任何单元格时,你会在左上角找到正确的数据。
    • 不,Excel 使用自 1900 年 1 月 1 日以来的天数 How Excel Stores Dates
    猜你喜欢
    • 2016-11-15
    • 2014-08-01
    • 2021-01-24
    • 2011-05-29
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    相关资源
    最近更新 更多