如何让我可以询问用户的生日并计算他们的存活天数?



到目前为止,我已经编写了以下代码:

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();

我是一个初学者在编码,我不知道如何使它,所以当我问人的出生日期,出生年份,出生月份,它可以计算他们活着的天数。我尝试将字符串放入DateTime.Parse();还有其他方法,但都不起作用。我怎样才能解决这个问题?

我想先说一下,考虑到你读取日期值的方式,我个人会选择D . Stanley的解决方案而不是这个答案。我只是提供这个,以便您可以理解为什么您的代码失败。

你的代码的问题(DateTime.Parse(BirthMonth + BirthDate + BirthYear);)所提供的日期将有效地变成以下字符串值:

03011923

或者更糟:

311923

您的系统将(大概)期待MM/dd/yyyy格式的日期,因此它不会理解这些值。这也不会在我的系统上工作,因为我的语言环境是英语(UK)(因此默认的线程文化是英语英国),所以我的期望是dd/MM/yyyy

我们可以通过将特定的文化传递给DateTime.Parse来改善不同的文化问题。例如,我们可以使用不变区域性,它需要MM/dd/yyyy格式的日期:

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

但是我们仍然有如何格式化日期的问题。您需要将组成部分与分隔符组合在一起:

BirthMonth + "/" + BirthDate + "/" + BirthYear

或者更好,使用字符串插值:

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

把它们放在一起我们得到:

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

上网试试

您可以创建一个日期字符串并调用Parse,或者将输入转换为整数并使用DateTime构造函数。我更喜欢后者,因为它消除了日期解析中固有的任何歧义:

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

相关内容

  • 没有找到相关文章

最新更新