【发布时间】:2018-03-28 22:22:45
【问题描述】:
我有一个服务器服务来监控和保持一堆 c# 客户端应用程序的更新。我的一些数据包有发送给客户的日期。使一些客户端更好的最新尝试(因为它们都有可以使用 websockets 的 Web 浏览器。但是 c# 代码有时会出现问题)我想我可以将相同的数据包发送到 javascript 并解析出我需要的内容。
我不希望更改现有数据包,也不希望创建另一个具有不同数据的字节 [] 以发送到网络。有没有办法从这 8 个字节中提取日期时间?
显而易见的问题是 javascript 中没有真正的 long 。 因此c#重构long的方式是行不通的
; 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);
有没有办法将 long 转换为 javascript 日期时间?
; 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
【问题讨论】:
-
我认为 ISO DateTime 格式存在用于这种互操作性......说真的,是什么让你认为这是最简单/最快的解决方案?任何 JSON 格式化程序都知道如何序列化为 JavaScript——有效格式
-
从 c# 到 c# 应用程序运行良好。我也不认为这会容易或快速。我希望有一些可笑和聪明的东西。该应用程序从未为其他环境开发。我猜我需要花时间向网络套接字发送单独的字节。
-
如果您决定将日期表示为单个数字 - 您至少可以选择比
Ticks更合理的数字,例如 unix 时间戳。
标签: javascript c# datetime double