我有一张表格,其中一列是Unix纪元时间(以秒为单位):1500598288
我该如何将它们转换为正常的日期?
我有一张表格,其中一列是Unix纪元时间(以秒为单位):1500598288
我该如何将它们转换为正常的日期?
EPOCHTODATE
:=EPOCHTODATE(1500598288)
ARRAYFORMULA
(或BYROW
,如果你倾向于使用LAMBDA
):=ARRAYFORMULA(EPOCHTODATE(A:A))
---以下答案仍然有效,但截至2023年已过时---=1500598288 / 86400 + DATE(1970, 1, 1)
ARRAYFORMULA
:=ARRAYFORMULA(A:A / 86400 + DATE(1970, 1, 1))
=(B71-date(1970,1,1))*86400
- Menelaostime(1, 0, 0)
来到达UTC+1,或者减去 time(1, 0, 0)
来到达UTC-1,以此类推。 - Joeytje50使用javascript的日期函数(Date function)创建自定义函数:
工具 > 脚本编辑器... >
function FROM_UNIX_EPOCH(epoch_in_secs) {
return new Date(epoch_in_secs * 1000); // Convert to milliseconds
}
接着在一个新列中,您可以输入=FROM_UNIX_EPOCH(A1)
=A1/86400+DATE(1970,1,1)+time(5,30,0)
现在距离原帖已经过去了3年,你可以进行以下操作:
工具 > 脚本编辑器... >
function millisToDate(timeInMillis){
var yourDateFromMillis = new Date(timeInMillis);
return yourDateFromMillis;
}
并在单元格中使用你的新函数...
=millisToDate(此处为单元格)
在已经接受的答案基础上,如果您希望能够比较日期,可以使用FLOOR()函数。
=FLOOR(1500598288/86400)+date(1970,1,1)
在其他精彩答案的基础上,这是我用来从纪元时间戳获取完整日期时间的方法。已经在Google Sheets中测试。
=QUOTIENT(A1, 86400) + date(1970, 1, 1) + time(quotient(MOD(A1, 86400), 3600), quotient(mod(A1, 3600), 60), mod(A1, 60))
一些例子:
时期 | 日期时间 |
---|---|
0 | 1970年01月01日 0点0分0秒 |
61 | 1970年01月01日 0点1分1秒 |
3599 | 1970年01月01日 0点59分59秒 |
86403 | 1970年01月02日 0点0分3秒 |
2678402 (=86400*31+2) | 1970年02月01日 0点0分2秒 |
31536008 (=86400*365+8) | 1971年01月01日 0点0分8秒 |
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 Sheets 中使用方法:
=EpocToDate(1451606400000)
=EpocToDate(VALUE(C2))
ttarchala 给出的公式是不正确的。这里是一个更详细的答案。
我建议不要替换以秒为单位的时期时间列中的数据。您可能需要它进行排序等操作。此外,将公式应用于整个列将会很困难。相反,最初在其旁边插入一个新列。
单击最顶部时期单元格旁边的新单元格。假设最顶部的时期单元格是 A1,则将此公式输入到新单元格的公式框中。
=A1/8640000+date(1970,1,1)
日期时间应该显示在您的新单元格中。默认情况下,它只会显示日期而不是时间。要同时显示时间,您需要更改单元格格式。选择您的新日期单元格后,单击123格式下拉菜单并选择所需的单元格格式。
要将此公式应用于列中的所有单元格,请单击日期/时间单元格底部右侧的小黑色方块(手柄),并将其拖动到该列的底部。一旦您释放拖动,列应该填充有相邻时期数据单元格的日期时间转换。当您单独选择每个单元格时,您可以看到时期数据单元格索引在公式中发生了变化。