Generate Random Dates in C#
Complete code tutorial with examples and best practices
[ Code Example - Quick Summary ]
Language: C#
What: Generate random dates in C# using DateTime and Bogus library. Covers date ranges, formatting, timezone handling with DateTimeOffset, and integration with xUnit/NUnit.
Try it: Use our interactive Dates generator or integrate this code into your C# application.
Generate random dates in C# using DateTime and Bogus library. Covers date ranges, formatting, timezone handling with DateTimeOffset, and integration with xUnit/NUnit. Looking for other languages? Check our code examples in PHP , JavaScript , Python , Java , C++ , Ruby and Go or use our interactive web generator.
C# Code Example
using System;
using System.Linq;
public class RandomDateGenerator
{
private static readonly Random random = new Random();
// Generate random date between two dates
public static DateTime RandomDate(DateTime startDate, DateTime endDate)
{
int range = (endDate - startDate).Days;
return startDate.AddDays(random.Next(range + 1));
}
// Generate random past date (within last N days)
public static DateTime RandomPastDate(int daysAgo = 365)
{
return DateTime.Now.AddDays(-random.Next(daysAgo + 1));
}
// Generate random future date (within next N days)
public static DateTime RandomFutureDate(int daysAhead = 365)
{
return DateTime.Now.AddDays(random.Next(daysAhead + 1));
}
// Generate random birthday (18-80 years ago)
public static DateTime RandomBirthday()
{
var today = DateTime.Now;
var minAge = 18;
var maxAge = 80;
var randomAge = random.Next(minAge, maxAge + 1);
var birthYear = today.Year - randomAge;
var startOfYear = new DateTime(birthYear, 1, 1);
var endOfYear = new DateTime(birthYear, 12, 31);
return RandomDate(startOfYear, endOfYear);
}
// Generate random DateTime with time component
public static DateTime RandomDateTime(DateTime startDate, DateTime endDate)
{
var date = RandomDate(startDate, endDate);
var hour = random.Next(24);
var minute = random.Next(60);
var second = random.Next(60);
return new DateTime(date.Year, date.Month, date.Day, hour, minute, second);
}
// Generate random DateTimeOffset (timezone-aware)
public static DateTimeOffset RandomDateTimeOffset(DateTime startDate, DateTime endDate)
{
var dateTime = RandomDateTime(startDate, endDate);
return new DateTimeOffset(dateTime, TimeSpan.Zero);
}
// Generate multiple random dates
public static string[] GenerateRandomDates(int count, string startDate, string endDate)
{
var start = DateTime.Parse(startDate);
var end = DateTime.Parse(endDate);
return Enumerable.Range(0, count)
.Select(_ => RandomDate(start, end).ToString("yyyy-MM-dd"))
.ToArray();
}
// Using Bogus library (Install-Package Bogus)
// using Bogus;
// var faker = new Faker();
// DateTime randomDate = faker.Date.Between(startDate, endDate);
// DateTime pastDate = faker.Date.Past(1); // 1 year ago
// DateTime futureDate = faker.Date.Future(1); // 1 year ahead
// DateTime birthday = faker.Date.Past(80, DateTime.Now.AddYears(-18));
// DateTimeOffset recentDate = faker.Date.RecentOffset(30); // Last 30 days
public static void Main()
{
var start = new DateTime(2020, 1, 1);
var end = new DateTime(2025, 12, 31);
Console.WriteLine($"Random date: {RandomDate(start, end):yyyy-MM-dd}");
Console.WriteLine($"Past date: {RandomPastDate(30):yyyy-MM-dd}");
Console.WriteLine($"Future date: {RandomFutureDate(90):yyyy-MM-dd}");
Console.WriteLine($"Random birthday: {RandomBirthday():yyyy-MM-dd}");
Console.WriteLine($"With time: {RandomDateTime(start, end):yyyy-MM-dd HH:mm:ss}");
Console.WriteLine($"Batch: {string.Join(", ", GenerateRandomDates(5, "2020-01-01", "2025-12-31"))}");
}
}
[EXPLANATION]
C#'s DateTime struct represents dates and times. TimeSpan represents time intervals for date arithmetic. AddDays(), AddMonths(), AddYears() perform date calculations. DateTimeOffset includes timezone information. String interpolation with format specifiers like {date:yyyy-MM-dd} simplifies formatting. Bogus library provides Date.Between(), Past(), Future(), and Recent() methods for realistic test data generation in xUnit, NUnit, and MSTest.
Expected Output
Random date: 2023-07-15 Past date: 2024-11-17 Future date: 2025-03-15 Random birthday: 1985-04-23 With time: 2024-07-15 14:32:47 Batch: 2022-03-12, 2024-08-05, 2021-11-28, 2023-05-19, 2025-01-07
Common Use Cases
- Generate test data for Entity Framework models with date properties
- Create sample datasets for ASP.NET Core API testing
- Populate date fields in xUnit and NUnit test fixtures
- Test date validation and business rules in .NET applications
- Generate time-series data for reporting and analytics
Important Notes
-
DateTime.Nowuses local time;DateTime.UtcNowreturns UTC -
DateTimeOffsetis recommended for timezone-aware scenarios -
Bogus supports fluent syntax:
faker.Date.Past(yearsToGoBack: 5) -
For thread-safe random generation, create separate
Randominstances -
DateTime.Parse()is culture-sensitive; useParseExact()for specific formats
Try Our Interactive Generator
Don't want to write code? Use our free web-based Dates generator with instant results.
TRY DATES GENERATOR →Other Programming Languages
View Dates generation code examples in PHP
View Dates generation code examples in JavaScript
View Dates generation code examples in Python
View Dates generation code examples in Java
View Dates generation code examples in C++
View Dates generation code examples in Ruby
View Dates generation code examples in Go