【问题标题】:Convert Unix Epoch Time to Date in Google Sheets在 Google 表格中将 Unix 纪元时间转换为日期
【发布时间】:2017-12-26 21:34:06
【问题描述】:

我有一张包含 unix 纪元时间列的表格(以秒为单位):1500598288

如何将这些转换为正常日期?

【问题讨论】:

  • 工作表将在哪个时区显示此日期?不同的用户打开它吗?

标签: javascript datetime google-apps-script google-sheets epoch


【解决方案1】:

不需要任何 JS 编程的最简单方法是通过一个公式,除以每天 86400 秒并加上 1970 年 1 月 1 日。例如,以下给出 2017 年 7 月 21 日:

=1500598288/86400+date(1970,1,1)

要转换一整列数字,只需使用 ARRAYFORMULA:

=arrayformula(A:A/86400+date(1970,1,1))

【讨论】:

  • 另外,Unix 时间是 UTC(协调世界时)。考虑到您的时区,例如,我在旧金山,它会是
  • 现在是 2017 年,而 Google,超级用户的土地,不认为有人想在电子表格中将时间戳转换为人类可读的日期。我一定是生活在错误的宇宙中。
  • 很好!!反过来是:=(B71-date(1970,1,1))*86400
  • @Shaardool ,是的,有数据的单元格!
  • 这里需要注意的是,如果您想将 Unix 时间戳转换为您自己的时区,您还应该添加 time(1, 0, 0) 以转到 UTC+1,或减去 time(1, 0, 0) 以转到UTC-1 等
【解决方案2】:

使用 javascript Date function 创建自定义函数:

工具 > 脚本编辑器... >

function FROM_UNIX_EPOCH(epoch_in_secs) {
  return new Date(epoch_in_secs * 1000);  // Convert to milliseconds
}

然后在一个新列中你可以做=FROM_UNIX_EPOCH(A1)

【讨论】:

    【解决方案3】:

    现在,距原始帖子 3 年后,您可以制作...

    工具 > 脚本编辑器... >

    function millisToDate(timeInMillis){
        var yourDateFromMillis = new Date(timeInMillis);
        return yourDateFromMillis;
    }
    

    并在单元格中使用您的新功能...

    =millisToDate(cell here)

    【讨论】:

    • 我经常使用上面的功能。我在这里添加一些奖励项目。 :) 您也可以设置为语言环境时间。例如: function millisToDate(timeInMillis){ var yourDateFromMillis = new Date(timeInMillis).toLocaleString('en-US', { timeZone: 'Asia/Kolkata' });从Millis返回你的日期;时区在这里。 en.wikipedia.org/wiki/List_of_tz_database_time_zones
    • 这个答案在谷歌表格中有效,而上面的 FROM_UNIX_EPOCH() 没有。
    【解决方案4】:

    在谷歌表格单元格中将 Epoch Timestamp 添加到 DateTime(GMT 调整)

    =A1/86400+DATE(1970,1,1)+时间(5,30,0)

    【讨论】:

    • 简单而且有效。谢谢!!!
    【解决方案5】:

    在接受的答案的基础上,如果您希望能够比较日期,您将需要使用 FLOOR()

    =FLOOR(1500598288/86400)+date(1970,1,1)
    

    否则,一个单元格中的“7/21/2017”可能不等于另一个单元格中的“7/21/2017”。

    【讨论】:

      【解决方案6】:

      在 AppScript 中粘贴:

      function EpocToDate(epoch) {
        //var epoch = 1451606400000; 12/31/2015 19:00:00
        return (Utilities.formatDate(new Date (epoch),'America/New_York','MM/dd/yyyy HH:mm:ss'));
      }
      

      在 Google 表格中用作:

      =EpocToDate(1451606400000)
      

      如果您必须从另一个单元格引用:

      =EpocToDate(VALUE(C2))
      

      【讨论】:

        【解决方案7】:

        ttarchala 在答案中给出的公式不正确。这是一个更广泛的答案。

        我建议不要替换自纪元以来的秒数列中的数据。您可能需要它进行排序等。此外,将公式应用于整个列将很困难。相反,最初在它旁边插入一个新列。

        单击与最顶层 epoch 单元相邻的新单元。假设最上面的纪元单元格是 A1,则将此公式输入到新单元格的公式框中。

        =A1/8640000+date(1970,1,1)
        

        日期时间应显示在新单元格中。默认情况下,它只会显示日期而不显示时间。要使其也显示时间,您需要更改单元格格式。选择新的日期单元格后,单击 123 格式下拉菜单并选择所需的单元格格式。

        要将此公式应用于列中的所有单元格,请单击日期/时间单元格右下角的黑色小方块(手柄)并将其拖动到列底部。释放拖动后,列应填充其相邻纪元数据单元格的日期时间转换。当您单独选择每个单元格时,您可以看到公式中的纪元数据单元格索引发生了变化。

        【讨论】:

        • 你能详细说明我的答案到底哪里不正确吗?
        • 另外,我的答案很容易通过使用 =ARRAYFORMULA() 应用于整个列。
        • 我也担心你的答案不正确——OP要求以为单位转换时间,因此时间应除以86,400秒每天。你为什么要告诉 OP 除以 8,640,000?
        猜你喜欢
        • 2016-09-15
        • 2014-01-25
        • 2018-10-01
        • 2013-04-02
        • 2013-01-08
        • 2018-12-27
        • 2011-02-14
        • 2020-05-24
        相关资源
        最近更新 更多