另一种存储日期和时间的数据类型
本文关键字:数据类型 时间 存储 日期 另一种 | 更新日期: 2023-09-27 18:08:49
我正在创建一个创建数据包数据的c#程序。数据包中的一个数据是4字节大小的Date和Time。我这样做了:
public byte[] convertDateTimetoHex4bytes(DateTime dt)
{
//Convert date time format 20091202041800
string str = dt.ToString("yyyyMMddhhmmss");
//Convert to Int32
Int32 decValue = Convert.ToInt32(str);
//convert to bytes
byte[] bytes = BitConverter.GetBytes(decValue);
return bytes;
}
然而,似乎我需要使用8字节的数据,因为32位太小(运行时错误)。任何人都可以帮助我,如果有任何其他较小的日期时间格式与4字节?或者其他方式?
这个错误是逻辑上的,因为给定的字符串值在转换为数字时,只是太大无法用Int32表示,而且额外的信息不能"塞进去"。
20140616160000 -- requested number (i.e. DateTime for today)
2147483647 -- maximum Int32 value (2^31-1)
UNIX时间戳可能以[传统的]32位工作,但它只有秒精度和1970~2038的有限范围。参见如何将Unix时间戳转换为DateTime,反之亦然?如果对这种方法感兴趣。
时间戳的结果是一个较小的数字范围,因为它没有在不同的时间组件周围使用未使用的数字;例如,在原始格式中,不使用以下格式的并集中的数字,从而"浪费":
yyyyMMddhhmm60-yyyyMMddhhmm99 -- these seconds will never be
yyyyMMddhh60ss-yyyyMMddhh99ss -- these minutes will never be
yyyyMMdd25hhss-yyyyMMdd99hhss -- these hours will never be
-- etc.