在 LibreOffice Calc 中将纪元时间转换为人类可读的时间

Faz*_*bbi 22 timestamps libreoffice

我在单元格中有一个纪元时间,H2其值为1517335200000. 我正在尝试将其转换为人类可读的格式,该格式应30/01/2018 6:00:00 PM以格林威治标准时间返回。

我试图用H2/86400+25569我从 OpenOffice 论坛得到的公式来转换它。公式返回值17587319。当我将 LibreOffice Calc 中的数字格式更改为 时Date,它返回06/09/-15484. 那不是我想要的价值。那么,如何以 dd/mm/yyyy hh:mm:ss 格式获取值?

ImH*_*ere 36

如果H2包含要转换的数字 ( 1517335200000)。

  1. 使H3包含公式:

    = H2/1000/(60*60*24) + 25569

    这将返回数字 43130.75。

  2. 将单元格的格式更改H3为日期。任何一个:

    • Shift- Ctrl-3
    • 选择格式-->数字格式-->日期
    • 选择格式-->单元格(打开一个窗口) -->数字-日期-格式
  3. H3单元格的格式更改为所需的日期格式:

    • 选择格式-->单元格(打开一个面板) -->数字-日期-格式(选择一个)
  4. 如果宽度不足以显示所需的格式,请扩展单元格的宽度(提示:出现三个 #)。


为什么:

纪元时间以 1970 年 1 月 1 日以来的秒数为单位。
Calc 内部时间以 1899 年 12 月 30 日以来的天数为单位。
因此,要在 H3 中获得正确的结果:

  1. 得到正确的数字(最后一个公式):

    H3 = H2/(60*60*24) + ( Difference to 1/1/1970 since 12/30/1899 in days )
    H3 = H2/86400      + ( DATE (1970,1,1) - DATE(1899,12,30) )
    H3 = H2/86400      +   25569
    
    Run Code Online (Sandbox Code Playgroud)

    但是你给出的纪元值太大了,比它应该的大三个零。应该是 1517335200 而不是 1517335200000。它似乎以毫秒为单位给出。因此,除以 1000。随着这种变化,公式给出:

    H3 = H2/1000/86400+25569  =  43130.75
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更改H3日期和时间的格式(格式 --> 单元格 --> 数字 --> 日期 --> 日期和时间),您将看到:

    01/30/2018 18:00:00
    
    Run Code Online (Sandbox Code Playgroud)

    在 H3。


当然,由于 Unix 纪元时间始终基于 UTC(+0 子午线),因此上面的结果需要移动与本地时区距离 UTC 一样多的小时数。因此,要获取当地时间,如果时区是太平洋标准时间 GMT-8,我们需要添加 (-8) 小时。H4 中具有本地时区 (-8) 的 H3 的公式为:

H3 = H2/1000/86400 + 25569 + H4/24 = 43130.416666
Run Code Online (Sandbox Code Playgroud)

并呈现为:

01/30/2018 10:00:00
Run Code Online (Sandbox Code Playgroud)

如果H3的格式设置为这样的时间格式。