Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表示日期和时间的最小字节数是多少?_C#_Datetime_Date_Time_Byte - Fatal编程技术网

C# 表示日期和时间的最小字节数是多少?

C# 表示日期和时间的最小字节数是多少?,c#,datetime,date,time,byte,C#,Datetime,Date,Time,Byte,我需要通过TCP/IP将当前操作系统的日期和时间从甲方传输到乙方,精确到微秒 最小字节数是多少 可以用来表示这一点 在不牺牲准确性的情况下 以及如何转换日期和时间 到您的字节格式 使用C# 日期时间。Tick是日期时间的二进制格式表示形式自某个固定时间点起,最少的位数将使用微秒。但是当你这样做的时候,在将来的某个时候,你的时间戳会溢出 例如,如果您选择固定的时间点,如昨天。那么5个字节就足够对从昨天到下周中旬的时间进行编码了 但这似乎不必要地复杂日期时间。勾选仅使用8字节的空间。它精确到1/1

我需要通过TCP/IP将当前操作系统的日期和时间从甲方传输到乙方,精确到微秒

  • 最小字节数是多少 可以用来表示这一点 在不牺牲准确性的情况下

  • 以及如何转换日期和时间 到您的字节格式 使用C#


    • 日期时间。Tick是日期时间的二进制格式表示形式

      自某个固定时间点起,最少的位数将使用微秒。但是当你这样做的时候,在将来的某个时候,你的时间戳会溢出

      例如,如果您选择固定的时间点,如昨天。那么5个字节就足够对从昨天到下周中旬的时间进行编码了


      但这似乎不必要地复杂<代码>日期时间。勾选仅使用8字节的空间。它精确到1/10微秒,跨越了所有人类历史记录,它引用了一个定义的时间点(第一年1月1日),最重要的是,它的标准时间显然是DateTime。滴答声可以代表从0001年到纳秒级的时间。根据上面的海报,它需要8字节的空间

      但是,要获得从0000年到9999年的所有微秒的最小表示,可以按如下方式计算:

      9999年*365天*24小时*60分钟*60秒*1000000微秒=525547400000

      项次(高于数字)/项次(2)=52.22274..--53位

      53位=6.5字节

      因此,可以使用非标准表示法保存字节(基本上不必表示纳秒)

      编写转换例程非常简单。只需将每个日期、时间、毫秒转换为0000年初和9999年之间的适当毫秒。要重新获取日期时间,只需进行反向计算。这很简单,你应该能弄明白


      但是,我非常怀疑节省1字节是否值得,因为这包括工作、潜在的bug、非标准化、维护、文档等。

      答案:无限多的字节

      理由:见约翰·克诺勒的答案。基本上,如果您选择任何有限数量的位,那么它只能表示有限数量的时间点。由于时间无限延伸到过去和未来,它将无法在时间中表示某些(实际上是无限数量的)实例


      这将是一个很好的面试问题:)

      如果你总是包括微秒,你最好使用前面讨论过的固定字节数-但是,如果这是通用的序列化,你可能想利用很多常规值都有日期或小时值这一事实。对于protobuf net,它标记刻度(天、小时、分钟、秒、毫秒或滴答声),并发送给定时间和任意历元(1/1/1970)之间的整数。为了进一步减少这种情况,使用可变长度编码传递整数,从而非常方便地传递最常见的值。这使得它能够以最小的字节数发送日期值之类的内容。

      我不得不对Larry Watanabe的答案提出异议


      实际上,您可以使用单个字节以微秒为单位表示时间。您只能在纪元开始的255微秒内表示时间,这可能是一个很大的限制,也可能不是,取决于您的其他要求。

      为了使用DateTime。勾选,我需要选择一个固定的时间点,对吗?选择这个固定时间点有什么标准吗?@Lopper,不,你不需要选择固定时间点。System.DateTime已经帮你做到了,就像Portmain说的。如果你不使用标准时间点,你只需要选择一个时间点。标准?我们不相信标准——我们在这家公司创造了自己的时间!!我投票支持1984年1月17日。第一个Macintosh商业版的日期。次要点DateTime.Tics精确到100纳秒,或1/10微秒。纳秒是不准确的请检查一下数学:9999*365*24*60*60*1000000==315328464000000000不一定是无限的,宇宙大爆炸才14克年,我们不知道会持续多久。然而,我给了你+1!时间是一个连续变量,所以在任何时间跨度内都有无限多的时刻。@Doug Currie-您假设此应用程序只引用历史上的实际时间,而不是无限的未来。这可能是一个天文应用程序,试图计算数十亿年后的恒星位置。