如何从仅 DateTime.Now.Date 的值构造一个 2 字节或短的值? YYYYmmDD
How to construct a 2 bytes or short from DateTime.Now.Date only value? YYYYmmDD
我看到有些人按照以下方式将 Date 存储为仅 2 个字节 (ushort)!,而不是 4 个字节 (int)
假设格式 yyyyMMdd
: 20220521
, 适合 1 个短字符和 1 个字节。或仅 1 个整数。但是接下来的代码我只是从反编译的源代码中复制的。 (不明白他是怎么操作bits的。。。)
在我看来。年份的最后一位可以是 1 字节(2022 将存储为 22 字节)+ 1 short for month, day ....但我没能像下面的例子那样把它变成 2 个字节。
我什至不明白他们是如何实现的...我不明白下一个代码是如何工作的。想知道他是怎么想的...
private byte[] PackDate16(DateTime date)
{
if (date.Year < 2000 || date.Year > 2127)
throw new Exception("Invalid year for a 16-bit date. Allowed values are 2010-2127");
ushort num = (ushort)(date.Year - 2000 << 9 | date.Month << 5 | date.Day);
return new byte[2]
{
(byte) ((uint) num & (uint) byte.MaxValue),
(byte) ((uint) num >> 8)
};
}
搜索后...我找到了 https://bytes.com/topic/net/answers/661377-c-program-convert-2-byte-time-2-byte-date-datetime
是否有任何 Bit 库可以轻松做到这一点?
如果可以加减天数,为什么不使用位来操作呢?
private static short CompressMe(DateTime value, DateTime minDate) =>
(short)((value - minDate).Days + short.MinValue);
private static DateTime DeCompressMe(short value, DateTime minDate) =>
minDate.AddDays(value - short.MinValue);
例如:
DateTime minDate = new DateTime(2000, 1, 1);
// -24592
var result = CompressMe(new DateTime(2022, 5, 21), minDate);
// 6 June 2179
DateTime maxDate = DeCompressMe(short.MaxValue, minDate);
到目前为止,您可以将日期表示为 short
,如果它们在
1 Jan 2000 .. 6 Jun 2179
时期
我看到有些人按照以下方式将 Date 存储为仅 2 个字节 (ushort)!,而不是 4 个字节 (int)
假设格式 yyyyMMdd
: 20220521
, 适合 1 个短字符和 1 个字节。或仅 1 个整数。但是接下来的代码我只是从反编译的源代码中复制的。 (不明白他是怎么操作bits的。。。)
在我看来。年份的最后一位可以是 1 字节(2022 将存储为 22 字节)+ 1 short for month, day ....但我没能像下面的例子那样把它变成 2 个字节。
我什至不明白他们是如何实现的...我不明白下一个代码是如何工作的。想知道他是怎么想的...
private byte[] PackDate16(DateTime date)
{
if (date.Year < 2000 || date.Year > 2127)
throw new Exception("Invalid year for a 16-bit date. Allowed values are 2010-2127");
ushort num = (ushort)(date.Year - 2000 << 9 | date.Month << 5 | date.Day);
return new byte[2]
{
(byte) ((uint) num & (uint) byte.MaxValue),
(byte) ((uint) num >> 8)
};
}
搜索后...我找到了 https://bytes.com/topic/net/answers/661377-c-program-convert-2-byte-time-2-byte-date-datetime
是否有任何 Bit 库可以轻松做到这一点?
如果可以加减天数,为什么不使用位来操作呢?
private static short CompressMe(DateTime value, DateTime minDate) =>
(short)((value - minDate).Days + short.MinValue);
private static DateTime DeCompressMe(short value, DateTime minDate) =>
minDate.AddDays(value - short.MinValue);
例如:
DateTime minDate = new DateTime(2000, 1, 1);
// -24592
var result = CompressMe(new DateTime(2022, 5, 21), minDate);
// 6 June 2179
DateTime maxDate = DeCompressMe(short.MaxValue, minDate);
到目前为止,您可以将日期表示为 short
,如果它们在
1 Jan 2000 .. 6 Jun 2179
时期