在此处使用C#
我有以下设置,我想在其中更新createdOn日期并保存到我的数据库中。
foreach (var person in myData)
{
person.CreatedBy = "abc";
person.CreatedOn = DateTime.UtcNow.ToString("o");
}
myRepo.Save(myData);
问题是,如果我有5行数据,则所有5行都获得相同的createdOn
例如,以上所有内容都相同
CreatedOn as "2019-01-14T14:48:39.4814925Z"
我在这里想念的是什么,我想每次循环并添加createdOn都会得到下一个刻度。
答案 0 :(得分:2)
此属性的分辨率取决于系统计时器,该计时器取决于基础操作系统。它通常在0.5到15毫秒之间。结果,在较短的时间间隔(例如在循环中)重复调用Now属性可能会返回相同的值。
答案 1 :(得分:1)
如果您担心每个Person对象的值都不同,则可以在循环之前获取日期时间,并将100 nanoseconds
添加到每个值,因为1 nanosecond
等于1/1000000000 (billionth)
每秒钟,在每次迭代中添加100个这样的对象,同时给出唯一的时间,对于每个人对象,其精度仍然保持非常接近:
//Set a variable to hold the current utc time before the loop starts
DateTime currentUtcTime = DateTime.UtcNow;
foreach (var person in myData)
{
person.CreatedBy = "abc";
person.CreatedOn = currentUtcTime.ToString("o");
//Add 100 nanoseconds to the currentUtcTime variable
currentUtcTime = currentUtcTime.AddTicks(1);
}
myRepo.Save(myData);
DateTime.AddTicks
(https://docs.microsoft.com/en-us/dotnet/api/system.datetime.addticks?view=netframework-4.7.2)的文档
答案 2 :(得分:1)
DateTime
doesn't have this precision(tl; dr:“高精度计时根本不是DateTime
的目的;正如您所注意到的,这就是{{1 }}“ )。但是您可以在循环之前启动StopWatch
并将其StopWatch
的值添加到初始Elapsed
的值中:
DateTime.UtcNow