[英]Random date and time C# from last week
我正在尝试从上周生成开始和结束日期时间。
所以如果今天是 04/02/2022 那么我需要一个从上周开始的随机日期和时间,所以它可能是
开始时间 02/02/2022 10:00
结束 02/02/2022 10:30
请注意,结束时间始终为 30 分钟。
我可以使用这个来让日期部分工作
Random gen = new Random();
var start = DateTime.Now.AddDays(-7);
int range = (DateTime.Today - DateTime.Today.AddDays(-7)).Days;
var result = start.AddDays(gen.Next(range));
这应该有效:
Random gen = new Random();
var start = DateTime.Now.AddDays(-7);
start = start.AddDays(gen.Next(6)); // Add 0-6 days
start = start.AddHours(gen.Next(23)); // Add 0-23 hours
start = start.AddMinutes(gen.Next(1)); //Add 0-1 minutes.
var result = new DateTime(
start.Year,
start.Month,
start.Day,
start.Hour,
start.Minute % 2 == 0 ? 0 : 30, // If even then zero, if odd then 30.
0); // 0 seconds
这是一个有趣的挑战。 我个人喜欢简单的解决方案:
var halfHoursPrWeek = 7 * 24 * 2;
// Get last full hour; ex: 04.02.2022 15:00:00
var previousHour = DateTime.Today.AddHours(DateTime.Now.Hour);
var randomNrOfHalfHours = (new Random()).Next(halfHoursPrWeek);
// ex: 31.01.2022 20:30:00
var sometimeLastWeek = previousHour.AddMinutes(-randomNrOfHalfHours * 30);
正如我在评论中已经说过的,根据刻度生成一个DateTime
object。
//startDate 7 days ago, without time so 00:00:00
var startDate = DateTime.Now.Date.AddDays(-7);
//endDate with the time of 23:59:59
//notice manipulating the time this way could lead to a DateTime in the future, if you don't want that only use `DateTime.Now`
var endDate = DateTime.Now.Date.AddDays(1).AddMilliseconds(-1);
//ticks in range of the dateTimes
var ticks = new Random().NextInt64(startDate.Ticks, endDate.Ticks);
//new DateTime
var newDate = new DateTime(ticks);
Console.WriteLine($"NewDate in the range of {startDate} and {endDate}:");
Console.WriteLine(newDate);
请参阅以下内容:
const int MINUTES_PER_WEEK = 7 * 24 * 60;
DateTime date = DateTime.Now;
DateTime SundayMidnight = date.AddDays(-(int)date.DayOfWeek).Date;
DateTime startDate = SundayMidnight.AddDays(-7);
Random rand = new Random();
int randomMinutes = rand.Next(MINUTES_PER_WEEK - 30);
DateTime randomStartDate = startDate.AddMinutes(randomMinutes);
DateTime randomEndDate = startDate.AddMinutes(randomMinutes + 30);
通过刻度计算。
// One week interval in ticks.
const long WEEK = 6048000000000;
// Initial date & time.
DateTime now = DateTime.Now;
// Random decrease interval of 1 week.
Random gen = new Random();
long reduce = Convert.ToInt64(gen.NextDouble() * WEEK);
TimeSpan span = TimeSpan.FromTicks(reduce);
// Determine a random date at last week.
DateTime lastWeek = now - span;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.