第三方平台导出的数据里有个时间戳字段
里面存的实际是数值,将单元格设置为日期时间格式后,显示为如下,
例:
45568.77 --> 2024/10/3 18:25
45575.94 --> 2024/10/10 22:30
我在网上没搜到这种时间戳格式的转换公式
请问有知道的朋友不?
百度参考带代码:不知道对不对,自己修改一下
Dim myDate As Date
Dim myNumber As Long
myNumber = 45568.77 '假设数字为45568.77
myDate = DateSerial(Year:=Year(DateSerial(1900, 1, 1)) + Int(myNumber / 365), _
Month:=Month(DateSerial(1900, 1, 1)) + Int((myNumber Mod 365) / 30.42), _
Day:=Day(DateSerial(1900, 1, 1)) + (myNumber Mod 365) Mod 30.42)
MessageBox.Show( "日期为:" & myDate)
这个方法也可以试试:
Dim oaDate As Double = 45568.77
Dim days As Integer = CInt(Math.Floor(oaDate))
Dim hoursAndMinutes As Double = oaDate - days
' 创建一个基准日期,OA日期的0对应于1899年12月30日
Dim baseDate As New DateTime(1899, 12, 30)
Dim dateResult As DateTime = baseDate.AddDays(days)
' 将小时和分钟转换为TimeSpan
Dim hours As Integer = CInt(Math.Floor(hoursAndMinutes))
Dim minutes As Integer = CInt(((hoursAndMinutes - hours) * 60))
Dim timeResult As New TimeSpan(hours, minutes, 0)
' 将时间添加到日期
Dim result As DateTime = dateResult.Add(timeResult)
MessageBox.Show( "日期为:" & result.ToString("yyyy-MM-dd HH:mm:ss"))
我给的数字是取了2位小数的实际存的值是高精度的,比如:
45575.9380671296 --> 2024/10/10 22:30:49
45568.4551736111 --> 2024/10/3 10:55:27
这个函数没问题