将8个字节(C#DateTime Ticks)转换为JavaScript DateTime



我有一个服务器服务,可以监视并保留一堆C#客户端应用程序。我的一些数据包已发送给客户。最新的尝试使某些客户端更好(因为它们都有可以使用Websockets的Web浏览器。但是,C#代码有时会出现问题(,我认为我可以将同一数据包发送到JavaScript并解析我需要的内容。p>我宁愿不更改现有数据包,也不想创建其他带有不同数据的字节[]发送到网络。无论如何是否可以从那8个字节中提取日期时间?

显而易见的问题是JavaScript中没有真正的时间。因此,重建长时间的C#将不起作用

; javascript code to convert 8 bytes into a long
; shifting the number over 32 bits doesnt work as it goes into javascripts special place.
var num = ((arr[0 + offset] | (arr[1 + offset] << 8)) | (arr[2 + offset] << 0x10)) | (arr[3 + offset] << 0x18);
var num2 = ((arr[4 + offset] | (arr[5 + offset] << 8)) | (arr[6 + offset] << 0x10)) | (arr[7 + offset] << 0x18);
return num | (num2 << 0x20);

有没有办法将长期转换为JavaScript DateTime?

; C # code
; Time | 3/28/2018 5:40:07 PM
; actual bytes = [28, 107, 42, 75, 215, 148, 213, 8]
var bytes = BitConverter.GetBytes(DateTime.Now.Ticks);
; go through web socket to javascript 
var received_Uint8Array = socket.receive();
; how to create date from 8 bytes

您应该再次使用bitConverter

var ticks = BitConverter.ToInt64(received_Uint8Array);
var dateTime = new DateTime(ticks);

但如 Camilo terevinto 提到的C#具有较宽的序列化系统

最新更新