【问题标题】:Converting unix time into date-time via excel通过excel将unix时间转换为日期时间
【发布时间】:2018-02-18 04:28:01
【问题描述】:

试图将 1504865618099.00 Unix 时间转换为可读的日期时间。 我试过这个:

=(UNIX + ("1/1/1970"-"1/1/1900"+1)*86400) / 86400

但它不起作用。

【问题讨论】:

  • 看起来您的时间戳等于04/17/49657 @ 3:14am。它是否正确?不知何故,我一直使用的公式不适用于此。编辑:原来 excels 的最大日期是 9999 年 12 月 31 日
  • 是的,应该是那种格式。但我无法在 Excel 中转换它。你用什么公式?
  • 我使用=(A1/86400)+25569,效果很好。只需确保将输出单元格设置为 Date 类型即可。
  • 嗯,我绑定了这个,但我只得到#####...####
  • 顺便说一句,我在 Mac 上使用 Excel

标签: excel datetime unix-timestamp date-conversion


【解决方案1】:

您很可能看到日期为########,因为根据定义,EPOCH 时间以秒为单位 - https://en.wikipedia.org/wiki/Unix_time。这意味着该数字应为 10 个字符长。您的号码有 13 个字符(请参阅 1504865618099),并且很可能以毫秒 (MS) 为单位。为了修正公式,只需将数字除以 1000。请记住,这样您将失去 MS 精度,但在大多数情况下,这是可以的。所以最终的公式应该是:

=A1/(86400 * 1000) + DATE(1970,1,1)

【讨论】:

    【解决方案2】:

    TLDR

    =(A1/86400)+25569

    ...并且单元格的格式应该是日期。

    如果它不适合你

    • 如果您得到一个数字,您忘记将输出单元格格式化为日期。
    • 如果你得到#####,你可能没有真正的Unix时间。检查你的 https://www.epochconverter.com/ 中的时间戳。尝试将您的输入除以 10、100、1000 或 10000**
    • 您使用的时间戳超出了 Excel 的(非常扩展的)限制。
    • 您没有将A1 替换为包含时间戳的单元格;-p

    说明

    Unix 系统将时间点表示为数字。特别是自称为 Unix 纪元的零时间以来的秒数*,即 1/1/1970 00:00 UTC/GMT。这个秒数称为 "Unix timestamp""Unix time""POSIX time" 或只是 "timestamp" 有时(令人困惑)“Unix epoch”

    对于 Excel,他们选择了不同的零时间和步骤(因为谁不喜欢技术细节的多样性?)。所以 Excel 计数 days,因为 24 hours before 1/1/0000 UTC/GMT。所以 25569 对应于1/1/1970 00:00 UTC/GMT,25570 对应于2/1/1970 00:00

    现在,如果您还注意到我们每天有 86400 秒(24 小时 x60 分钟 x60 秒),您就会明白这个公式的作用:A1/86400 将秒转换为天,+25569 调整时间之间的偏移量Unix 是零时间,Excel 是零时间。

    顺便说一句,DATE(1970,1,1) 会帮助您返回 25569,以防您忘记这一切,因此编写公式的更“自我记录”方式是:

    =A1/(24*60*60) + DATE(1970,1,1)

    P.S.:所有这些都已经出现在其他答案中,而 cmets 只是没有按照我喜欢的方式布置,我觉得从另一个答案中编辑地狱是不行的。


    *:这几乎是正确的,因为你不应该计算闰秒

    **:例如在这个问题的情况下,这个数字是自 Unix 纪元以来的 毫秒

    【讨论】:

    • 我需要在 86400 除数上添加几个零才能获得正确的日期 - 希望我能再次为您投票,以便在您的答案中提供有用的注释。
    • 感谢这个答案的清晰布局,而不仅仅是数字。 @JohnSmith 已经 4 年了。接受这个答案:D
    【解决方案3】:

    如果你有########,它可以帮助你:

    =((A1/1000+1*3600)/86400+25569)
    

    +1*3600 是 GTM+1

    【讨论】:

      【解决方案4】:

      =A1/(24*60*60) + DATE(1970;1;1) 应该使用秒数。

      =(A1/86400/1000)+25569 如果您的时间以毫秒为单位,那么除以 1000 即可使用正确的日期

      不要忘记在输出单元格上将类型设置为Date。我用这个日期试了一下:1504865618099 等于8-09-17 10:13

      【讨论】:

      • 这对我有用,但只有当我用逗号替换 DATE 函数中的分号时。
      • @StevenRands Excel 在公式中使用分号还是逗号取决于区域设置。在大多数欧洲国家,它是分号,对于世界其他大部分国家,它是逗号。您可以在 Windows 设置中更改此设置。
      【解决方案5】:

      如果上述方法不适合您。对我来说,这不是出于某种原因;

      我正在处理的 UNIX 编号来自 Mozilla place.sqlite 日期。

      为了让它工作:我将 UNIX 单元格分成两个单元格:前 10 个数字之一(日期)和剩下的其他 4 个数字(我相信的秒数)

      然后我使用了这个公式 =(A1/86400)+25569 其中 A1 包含具有前 10 个数字的单元格;它起作用了

      【讨论】:

      • 需要在 Excel 中查看 Unix 时间我也发现从时间字符串中删除纳秒值更简单。我还为结果单元格使用了自定义格式,以我想要的方式显示数据。 RRK 的最佳答案说明了所有这些,但也说明了更多,有时我们需要的只是一个简单的答案。感谢 GuillaumeLabs,+1
      【解决方案6】:
      • 将纪元(Unix-Time)转换为常规时间,如下面的时间戳

        例如:1517577336206

      • 首先使用如下函数转换值

        =LEFT(A1,10) & "." & RIGHT(A1,3)

      • 输出如下所示

        例如:1517577336.206

      • 现在添加如下公式

        =(((B1/60)/60)/24)+DATE(1970,1,1)

      • 现在像下面这样格式化单元格或所需的格式(自定义格式)

        m/d/yyyy h:mm:ss.000

      现在例子时间来了

      2/2/2018 13:15:36.206

      三个零代表毫秒

      【讨论】:

      猜你喜欢
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2015-02-09
      • 1970-01-01
      • 2012-08-07
      • 2015-01-07
      相关资源
      最近更新 更多