【问题标题】:Converting 8 bytes (c# datetime ticks) to javascript datetime将 8 个字节(c# datetime ticks)转换为 javascript datetime
【发布时间】: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


【解决方案1】:

你应该再次使用 BitConverter

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

但正如 Camilo Terevinto 所提到的,C# 具有广泛的序列化系统

【讨论】:

    猜你喜欢
    • 2019-06-24
    • 2013-07-30
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    相关资源
    最近更新 更多