如何使用+ - 10秒缓冲区获取日期时间?

时间:2011-03-17 10:03:18

标签: c# datetime buffer

我有:

jobElement.CreationDate = jobElement.CreationDate + TimeSpan.FromHours(24.0);

我想没有严格的24小时,但有+ - 10秒缓冲。如23.59.10和00.00.10

用c#来达到目的?

6 个答案:

答案 0 :(得分:4)

这将以相同的概率生成CreationDate + 23:50和CreationDate + 24:10:

Random random = new Random(); 
TimeSpan buffer = TimeSpan.FromSeconds(10);

TimeSpan span = TimeSpan.FromHours(24.0);

// 50% of the time do this
if(random.Next() % 2 == 0)
{
    span += buffer;
}
// The rest of the time do this
else
{
    span -= buffer;
}

jobElement.CreationDate = jobElement.CreationDate + span;

答案 1 :(得分:0)

你需要做什么?

如果需要进行任何比较,请使用覆盖的相等运算符创建自定义类。

答案 2 :(得分:0)

如果你想要+/- 10,所有数字都在

之间
Random r = new Random();
int x = r.Next(-10, 11);
var ts =  TimeSpan.FromHours(24).Add(TimeSpan.FromSeconds((double)x));

jobElement.CreationDate = jobElement.CreationDate + ts;

答案 3 :(得分:0)

我不是百分百肯定你想要的,但我会试一试

DateTime dt1 = DateTime.Now;
DateTime dt2 = DateTime.Now.AddDays(1).AddSeconds(8);

这两个现在相隔24小时8秒。

然后,如果你想看看他们是否“差不多”24小时appart,你可以做这样的事情:

if( Math.Abs((dt1-dt2.AddDays(-1))) < 10 ){
  //dt2 is 24 after dt1 +- 10 seconds 
}else{
  //they are not
}

答案 4 :(得分:0)

当前日期的第一次(00.00.00) - / + 10秒将是:

DateTime dateFrom = jobElement.CreationDate.Date.AddSeconds(-10);
DateTime dateTo = jobElement.CreationDate.Date.AddSeconds(10);
是吗?

答案 5 :(得分:0)

我将添加此变体。它与其他人不同,因为它不是“基于第二”而是基于“tick”(tick是TimeSpan / DateTime可以计算的最小时间)

const int sec = 10; // +/- seconds of the "buffer"
const int ticksSec = 10000000; // There are 10000000 Ticks in a second

Random r = new Random();
int rng = r.Next(-sec * ticksSec, sec * ticksSec + 1); // r.Next is upper-bound exclusive
var ts = TimeSpan.FromHours(24) + TimeSpan.FromTicks(rng);
jobElement.CreationDate = jobElement.CreationDate + ts;

Random类中存在限制(它不能生成long,并且生成“约束”long(maxValue = x的long)仅基于Random类是非平凡的,所以这将工作长达3分钟和一些“缓冲”(214秒更准确)。