到目前为止,我已经编写了以下代码:
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));