6 字节时间戳到日期时间
本文关键字:日期 时间 时间戳 字节 | 更新日期: 2023-09-27 18:30:49
我使用第三方API。根据其规格如下
byte[] timestamp = new byte[] {185, 253, 177, 161, 51, 1}
表示从 1970 年 1 月 1 日起消息的毫秒数是为传输而生成的
问题是我不知道如何将其转换为日期时间。
我试过了
DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
long milliseconds = BitConverter.ToUInt32(timestamp, 0);
var result = Epoch + TimeSpan.FromMilliseconds(milliseconds);
结果是 {2/1/1970 12:00:00 AM},但预计是 2012 年。
byte[] timestamp = new byte[] { 185, 253, 177, 161, 51, 1, 0, 0, };
DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
ulong milliseconds = BitConverter.ToUInt64(timestamp, 0);
var result = Epoch + TimeSpan.FromMilliseconds(milliseconds);
结果 11/14/2011
添加 CodeInChaos 专用的填充代码:
byte[] oldStamp = new byte[] { 185, 253, 177, 161, 51, 1 };
byte[] newStamp = new byte[sizeof(UInt64)];
Array.Copy(oldStamp, newStamp, oldStamp.Length);
对于在大端机器上运行:
if (!BitConverter.IsLittleEndian)
{
newStamp = newStamp.Reverse().ToArray();
}
我认为timestamp
使用小端格式。我还省略了参数验证。
long GetLongLE(byte[] buffer,int startIndex,int count)
{
long result=0;
long multiplier=1;
for(int i=0;i<count;i++)
{
result += buffer[startIndex+i]*multiplier;
multiplier *= 256;
}
return result;
}
long milliseconds = GetLongLE(timestamp, 0, 6);