You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Unix时间戳转换为Excel日期时间及Windows时间戳格式的技术问询

Unix时间戳转换为Excel日期时间及Windows时间戳格式的技术问询

嘿,我来帮你搞定这个Unix转Windows时间戳的问题!首先得理清楚两者的基准差异:Unix时间戳是从1970年1月1日00:00:00 UTC开始计算的秒数,而Windows版Excel的时间戳基准是1900年1月0日(没错,是0日),单位是天。所以转换的核心就是把秒数转成天,再加上基准时间的偏移量。

方法一:不用VBA,直接用Excel公式

如果只是单个或少量转换,直接在单元格里用公式就行:
=(A1/86400)+DATE(1970,1,1)

  • 这里A1是存放Unix时间戳(比如你给的1662091200)的单元格
  • 86400是一天的总秒数(246060)
  • 输入公式后,记得把单元格格式设置为「日期时间」类型(比如选「yyyy-mm-dd hh:mm:ss」),就能看到清晰的时间了——你给的这个时间戳转出来是2022-09-02 00:00:00哦。

方法二:用VBA自定义函数(更灵活)

如果需要频繁转换,或者要在公式里复用,写个自定义函数最方便:

  1. 打开Excel,按下Alt+F11进入VBA编辑器
  2. 右键点击左侧的工作簿名称,选择「插入」→「模块」
  3. 粘贴下面的代码:
Function UnixToExcelTime(UnixTimestamp As Double) As Date
    ' 将Unix时间戳(秒级)转换为Excel日期时间格式
    UnixToExcelTime = (UnixTimestamp / 86400) + DateSerial(1970, 1, 1)
End Function
  1. 回到Excel界面,在单元格里输入=UnixToExcelTime(1662091200),就能直接得到转换后的日期时间啦,同样记得设置单元格格式。

方法三:VBA批量转换(适合大量数据)

要是你有一整列的Unix时间戳需要转换,可以用这个批量处理的宏:

Sub BatchConvertUnixToExcel()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    
    ' 这里可以改成你要处理的工作表名,比如"ThisWorkbook.Worksheets("数据页")"
    Set ws = ActiveSheet
    ' 获取A列最后一行有数据的行号
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 循环处理每一行
    For i = 1 To lastRow
        ' 只处理数值型的时间戳
        If IsNumeric(ws.Cells(i, "A").Value) Then
            ws.Cells(i, "B").Value = (ws.Cells(i, "A").Value / 86400) + DateSerial(1970, 1, 1)
            ' 设置B列单元格为标准日期时间格式
            ws.Cells(i, "B").NumberFormat = "yyyy-mm-dd hh:mm:ss"
        End If
    Next i
    
    MsgBox "批量转换完成啦!", vbInformation
End Sub

用法:同样在VBA编辑器里粘贴代码,回到Excel按下Alt+F8选中这个宏运行,就能把A列的时间戳批量转成B列的Excel时间格式。

⚠️ 注意:如果你的Unix时间戳是毫秒级的(比如13位数字),记得把代码里的86400改成86400000哦!

备注:内容来源于stack exchange,提问作者Prem

火山引擎 最新活动