我需要读取使用BinaryWriter类编写的自定义序列化二进制数据。
为了存储日期,原始设计师使用了BinaryWriter.Write( Data.ToBinary() );
This文章提到了ToBinary函数的工作原理;但我需要的是构建将在其他编程语言中模拟ToBinary()和FromBinary()方法的代码。
任何人都可以查看以下伪代码,并让我了解真实偏移位数。
long i = DateTime.Now.ToBinary();
// will likely need to add code here to "condition" the value
int yr = (i >> 48) & 0x7fff;
int mo = (i >> 44) & 0xf;
int day = (i >> 36) & 0xff;
int hr = (i >> 28) & 0xff;
int min = (i >> 20) & 0xff;
int sec = (i >> 12) & 0xff;
int ms = i & 0xfff;
PS。这个概念是否会起作用..或者是以总毫秒的形式存储的日期?
答案 0 :(得分:1)
您可以使用任何您想要的格式,只要您同时执行序列化和放大。反序列化:)但是,由于常见的表示是'Ticks',为什么不去那? 序列化就是关于节约和保护。恢复,只要你可以恢复你保存的任何东西,序列化工作:)
答案 1 :(得分:0)
使用 Int64 构造函数,但您应该注意 DateTimeKind 参数。如果序列化 DateTimeKind.Utc 并反序列化 DateTimeKind.Unspecified 或 DateTimeKind.Local 值,则可能会遇到麻烦。
注意:可能最安全的做法是使用 ToUniversalTime()序列化您的DateTime值,并始终使用 DateTimeKind.Utc