我想将Date一部分序列DateTime化为4个字节(可能是Int32).最快的方法是什么?
背景:为了序列化一个完整的DateTime我到目前为止一直在使用该ToBinary方法.它返回Int64我在其他地方存储的内容.现在,我只储存要求Date的部分DateTime只使用一半的空间.所以,我想知道如何以最快的方式实现这一点,因为性能至关重要.
我想到的选项是:
int通过使用一些乘法和属性访问来编码年,月,日和YYYYMMDD,这种编码是人类可读的良好副作用.ToBinary并保留返回的"上半部分或下半部分" long.不知道是否可能.DateTime内部存储方式.也许可以通过其他方式访问日期部分.你会怎么做?
DateTimes被存储为自0001年1月1日00:00:00以来的刻度数.因此,如果您使用DateTime Ticks并除以它TimeSpan.TicksPerDay,则最终得到自0001年1月1日以来的天数.
反向操作(乘以TimeSpan.TicksPerDay)反序列化时.
由于在该范围内"仅"3,652,058天DateTime,因此很容易适合Int32
要序列化:
System.DateTime toSerialize;
long longDays = toSerialize.Ticks / System.TimeSpan.TicksPerDay;
// Safe since (DateTime.MaxValue - DateTime.MinValue).Days << Int32.MaxValue
int days = (int)longDays;
// Serializes `days` however you would serialize any other int
Run Code Online (Sandbox Code Playgroud)
反序列化:
int days;
long ticks = days * System.TimeSpan.TicksPerDay;
System.DateTime deserialized = new DateTime(ticks);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |