对于Azure TableStorage
上的rowkey,使用了前缀后面的实体:
DateTime.MaxValue.Subtract(DateTime.UtcNow).TotalMilliseconds
据我所知,这个timestamp
应该作为一种“分类器”,以便更新的实体位于列表之上。因此,这个显示的代码行创建(我可以想象)当前日期/时间到DateTime.MaxValue
的毫秒数。
是否有一种简单而安全的方法,将这个毫秒“返回”转换为创建timestamp
的日期/时间?我对日期/时间转换不太熟悉......
答案 0 :(得分:1)
相当于23:59:59.9999999 UTC,9999年12月31日 阳历,正好在00:00:00之前100纳秒 UTC,1月1日,10000。
因此,考虑到大约1万年,你有:
10,000 x 365 x 24 x 60 x 60 x 1000 = 315,360,000,000,000 //Note 15-digit
double精度至少为15位。换句话说,只要您使用TotalMilliseconds
的前15位作为时间戳,那么它应该没问题。
我建议将其强制转换为long,其整数精度为:
–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
并使用AddMilliseconds
从最大值出现负号。
double db = Convert.ToDouble(timestamp);
DateTime dt = DateTime.MaxValue;
dt.AddMilliseconds(-db); //this will give you the datetime back with milliseconds precision
然后你将获得精确到毫秒。