将以毫秒为单位的差值转换为 .最大值返回到日期/时间
本文关键字:返回 最大值 日期 时间 转换 为单位 | 更新日期: 2023-09-27 18:36:47
对于 Azure TableStorage
实体上的行键,使用以下前缀:
DateTime.MaxValue.Subtract(DateTime.UtcNow).TotalMilliseconds
据我所知,这timestamp
应该充当一种"分类器",以便较新的实体位于列表的顶部。因此,显示的此代码行创建(我可以想象)当前日期/时间的毫秒数,直到DateTime.MaxValue
。
有没有一种简单而安全的方法,将这种毫秒数"转换回"到创建timestamp
的日期/时间?我对日期/时间转换不太熟悉...
DateTime.MaxValue 是:
相当于 9999 年 12 月 31 日 23:59:59.9999999 UTC 公历,正好在 00:00:00 之前有一个 100 纳秒的刻度 UTC,10000 年 1 月 1 日。
因此,考虑到大约 10,000 年,您有:
10,000 x 365 x 24 x 60 x 60 x 1000 = 315,360,000,000,000 //Note 15-digit
双精度至少为 15 位。换句话说,只要您使用TotalMilliseconds
的前 15 位数字作为时间戳,那么它应该没问题。
我建议将其转换为整数精度为:
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 //note, more than 15-digit
然后使用ToString("D15")
作为唯一时间戳:
long val = (long)DateTime.MaxValue.Subtract(DateTime.UtcNow).TotalMilliseconds;
string timestamp = val.ToString("D15");
要转换回来,您可以将其转换回 double
并使用带有 max 负号的AddMilliseconds
。
double db = Convert.ToDouble(timestamp);
DateTime dt = DateTime.MaxValue;
dt.AddMilliseconds(-db); //this will give you the datetime back with milliseconds precision
然后,您将获得高达毫秒的精度。