在 Google 表格中将 Unix 纪元时间转换为日期

Posted

技术标签:

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

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

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

【问题讨论】:

工作表将在哪个时区显示此日期?不同的用户打开它吗? 【参考方案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?

以上是关于在 Google 表格中将 Unix 纪元时间转换为日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C 中将 10131520 转换为 Unix 纪元时间?

如何在 kotlin 中将纪元时间戳转换为 unix 十六进制时间戳?

在 xslt 中将 dateTime 转换为 unix 纪元

如何在 Python 中将日期时间对象转换为自纪元(unix 时间)以来的毫秒数?

如何在 C 语言 (Linux) 中将 NTP 时间转换为 Unix 纪元时间

在perl中将日期转换为纪元的最佳方法[关闭]