using System.Globalization;
public class BirthdayProgram
public static void Main()
Console.Write("Enter your date of birth (ddmmyyyy): ");
string dobInput = Console.ReadLine();
bool isValid = isValidDob(dobInput,out DateTime dob);
Console.WriteLine("Invalid date format given");
int daysUntilNextBirthday = DaysUntilNextBirthday(dob);
string ageGroup = GetAgeGroup(dob);
int daysSinceBirth = DaysSinceBirth(dob);
Console.WriteLine($"Days until your next birthday: {daysUntilNextBirthday}");
Console.WriteLine($"You are {ageGroup}");
Console.WriteLine($"Days since your birth: {daysSinceBirth}");
static bool isValidDob(string input ,out DateTime date)
string format = "ddMMyyyy";
bool dateFormatCheck = DateTime.TryParseExact(input, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
static int DaysUntilNextBirthday(DateTime dob)
DateTime nextBirthday = new DateTime(DateTime.Now.Year, dob.Month, dob.Day);
if (nextBirthday < DateTime.Now)
nextBirthday = nextBirthday.AddYears(1);
return (nextBirthday - DateTime.Now).Days;
static string GetAgeGroup(DateTime dob)
int age = DateTime.Now.Year - dob.Year;
if (DateTime.Now < dob.AddYears(age))
return age >= 18 ? "Over 18" : "Under 18";
static int DaysSinceBirth(DateTime dob)
return (DateTime.Now - dob).Days;