从.net Data.ToBinary()中提取数据

时间:2011-04-07 18:10:45

标签: .net datetime binarywriter

我需要读取使用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。这个概念是否会起作用..或者是以总毫秒的形式存储的日期?

2 个答案:

答案 0 :(得分:1)

您可以使用任何您想要的格式,只要您同时执行序列化和放大。反序列化:)但是,由于常见的表示是'Ticks',为什么不去那? 序列化就是关于节约和保护。恢复,只要你可以恢复你保存的任何东西,序列化工作:)

答案 1 :(得分:0)

使用 Int64 构造函数,但您应该注意 DateTimeKind 参数。如果序列化 DateTimeKind.Utc 并反序列化 DateTimeKind.Unspecified DateTimeKind.Local 值,则可能会遇到麻烦。

注意:可能最安全的做法是使用 ToUniversalTime()序列化您的DateTime值,并始终使用 DateTimeKind.Utc