Home > Blockchain >  How to make it so that I can ask a user their birthday and calculate days alive?
How to make it so that I can ask a user their birthday and calculate days alive?

Time:09-22

I have so far made this code:

 Console.WriteLine("Hey, what your name?");
        Console.Write("Enter your name: ");
        string YourName;




        YourName = Console.ReadLine();
        Console.WriteLine("Wow what a nice name!");
        Console.ReadLine();


        Console.WriteLine("What about your age?");
        Console.Write("Enter your year of birth: ");
        string BirthYear;




        BirthYear = Console.ReadLine();
        Console.Write("Enter your month of birth (number not actual month): ");
        string BirthMonth;




        BirthMonth = Console.ReadLine();
        Console.Write("Enter you day of birth: ");
        string BirthDate;
        BirthDate = Console.ReadLine();




        DateTime myBirthAge = DateTime.Parse(BirthMonth   BirthDate   BirthYear);
        TimeSpan myAge = DateTime.Now.Subtract(myBirthAge);
        Console.WriteLine(myAge.TotalDays);
        Console.ReadLine();

I am a beginner at coding and I do not know how to make it so that when I do ask for the persons day of birth, year of birth, and month of birth, it can calculate the number of days they are alive. I tried putting the strings into the DateTime.Parse(); and other methods, but it did not work. How am I able to fix this?

CodePudding user response:

You can either create a date string and call Parse, or convert the inputs to integers and use the DateTime constructor. I'd prefer the latter since it removes any ambiguity that is inherent in date parsing:

DateTime myBirthAge = new DateTime(int.Parse(BirthYear), 
                                   int.Parse(BirthMonth), 
                                   int.Parse(BirthDay));

CodePudding user response:

I want to preface this by saying that, given the way you're rading the date values, I would personally choose this solution by D Stanley over this answer. I'm simply providing this so that you can understand why your code was failing.

The issue with your code (DateTime.Parse(BirthMonth BirthDate BirthYear);) is that the provided date will effectively become the following string value:

03011923

Or worse:

311923

Your system will (presumably) be expecting the date in the format MM/dd/yyyy, so it won't understand those values. This also wouldn't work on my system as my locale is English (UK) (and thus the default thread culture is English UK) so mine would expect dd/MM/yyyy.

We can improve the differing culture issue by passing a specific culture to DateTime.Parse. For example we can use the invariant culture, which expects dates in MM/dd/yyyy format:

DateTime.Parse(BirthMonth   BirthDate   BirthYear, System.Globalization.CultureInfo.InvariantCulture);

But then we still have the issue of how the date is formatted. You'll want to combine the constituent parts with dividers:

BirthMonth   "/"   BirthDate   "/"   BirthYear

Or better yet:

$"{BirthMonth}/{BirthDate}/{BirthYear}"

Putting it all together we get:

DateTime myBirthAge = DateTime.Parse($"{BirthMonth}/{BirthDate}/{BirthYear}", System.Globalization.CultureInfo.InvariantCulture);

Try it online

  • Related