2011-03-17 40 views
0

我有:如何獲得日期時間+ - 10秒緩衝區?

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

我想有沒有嚴格的24小時,但與+ - 10秒緩衝。像23.59.10和00.00.10

熱到達與c#?

+1

因此,你有兩個日期時間,並希望看到它們(幾乎)相隔24小時? – 2011-03-17 10:04:35

+0

順便說一句,+ 10秒緩衝區將從23.59.50到00.00.10。 – 2011-03-17 10:06:53

+0

是的,我想要得到它 – 2011-03-17 10:08:11

回答

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; 
0

你需要做什麼?

如果您需要進行任何比較,請使用覆蓋的相等運算符創建自定義類。

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; 
+0

r.Next:第二個參數是'返回的隨機數的唯一上限。 maxValue必須大於或等於minValue.'所以r.Next(-10,11) – xanatos 2011-03-17 10:21:29

0

我不是100%確定要在這裏,但我給它一個鏡頭

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

這兩個現在在24小時08秒AP什麼藝術。

然後,如果你想看看他們是「幾乎」24小時APPART,你可以做這樣的事情:

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

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

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

是不是這樣?

0

我會添加這個變體。它是與別人不同,因爲它不是「第二個依據」,但根據「嘀」(刻度是一個時間跨度/日期時間可以計算的最小時間)

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(long和maxValue = x)不僅僅基於Random類是非平凡的,所以這將工作長達3分鐘,並且「緩衝區」(214秒)