【问题标题】:How to make it so that I can ask a user their birthday and calculate days alive?如何做到这一点,以便我可以询问用户他们的生日并计算活着的天数?
【发布时间】:2021-09-22 01:17:37
【问题描述】:

到目前为止,我已经编写了这段代码:

 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();和其他方法,但没有奏效。我该如何解决这个问题?

【问题讨论】:

  • 您的 DateTime.Parse 部分为空。请出示这个。
  • 快速提醒:您曾说过您尝试过使用DateTime.Parse,但您没有向我们展示那是什么。如果你只是一个 100% 正确的小角色怎么办?您不希望我们能够更正您拥有的代码吗?
  • 啊,好的,我现在就解释。
  • 我还推荐DateTime.Now.Date 以确保当前时间不会改变答案。
  • 哦,好的,我会确保的!

标签: c# datetime


【解决方案1】:

我想先说一下,鉴于您对日期值进行评分的方式,我个人会选择 D Stanley 的the solution,而不是这个答案。我只是提供这个,以便您了解您的代码失败的原因。

您的代码存在问题 (DateTime.Parse(BirthMonth + BirthDate + BirthYear);) 是提供的日期将有效地成为以下字符串值:

03011923

或者更糟:

311923

您的系统将(可能)期待MM/dd/yyyy 格式的日期,因此它不会理解这些值。这在我的系统上也不起作用,因为我的语言环境是英语(英国)(因此默认线程文化是英国英语)所以我的期望是 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);

Try it online

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 对不起,我还是个初学者,我需要把字符串改成整数吗?
    • @KyuRiii 您使用 D Stanley 正在使用的构造函数。
    • @KyuRiii 是的 - 这就是 int.Parse 所做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2020-06-07
    • 2015-06-20
    • 2021-08-07
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多