关于日期时间:关于C#中出生日期的简单年龄计算器

Simple Age Calculator base on date of birth in C#

本问题已经有最佳答案,请猛点这里访问。

我创建了一个简单的年龄计算器。我想删除小数点,但问题是当我将now减为bday时。

示例:我输入20121023,日期现在是2014-10-22,所以当2014.1022 - 2012.1023的结果是1.9999...的时候,我想去掉所有的小数位,保留整数1,但是当我使用String.Format("{0:00}"的时候,它会把结果四舍五入到02,即使我使用ConvertToInt32的时候,我也不想使用拆分字符串,它需要大量的代码。

有什么想法吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 static void Main(string[] args)
        {
            string year, month, day = string.Empty;
            Console.WriteLine("Enter your Birthdate:");
            Console.WriteLine("Year :");
            year = Console.ReadLine();
            Console.WriteLine("Month :");
             month = Console.ReadLine();
            Console.WriteLine("Day :" );
            day = Console.ReadLine();
            try
            {
                DateTime date = Convert.ToDateTime(year +"-" + month +"-" + day);
                 var bday = float.Parse(date.ToString("yyyy.MMdd"));
                 var now = float.Parse(DateTime.Now.ToString("yyyy.MMdd"));
                 if (now < bday)
                 {
                     Console.WriteLine("Invalid Input of date");
                     Console.ReadLine();

                 }
                 Console.WriteLine("Your Age is" + (String.Format("{0:00}", (now - bday)))); //it rounds off my float
                 Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.ReadLine();
            }

        }

}


与评论相反,请不要在这里帮忙,因为一年不是固定的时间长度。这个转向你表达的爱是非常陌生的。你真的不应该把一个日期作为一个分数数,与第一个两个月的数字和第三和第四个几天的数字联系起来。时间不象这样工作。(Consider that the difference between 2014.0131 and 2014.0201 is much greater than the difference between 2014.0130 and 2014.0131,for example.)

最好在年月、月、日等术语中反映年龄。我的诺达时光图书馆让人觉得很简单

1
2
3
4
5
LocalDate birthday = new LocalDate(1976, 6, 19); // For example
LocalDate today = LocalDateTime.FromDateTime(DateTime.Now).Date; // See below
Period period = Period.Between(birthday, today);
Console.WriteLine("You are {0} years, {1} months, {2} days old",
                  period.Years, period.Months, period.Days);

如果你只想确定一个年份,你可以决定只使用EDOCX1[/1],或者可能根据EDOCX1[/2]回归结果。

我将建议使用DateTime.Now生产代码。在Noda时刻,我们有一个EDOCX1&4的界面代表"一个瞬间到达的方法",与一个EDOCX1&5一起在主要会议和一个EDOCX1&6中实现"。你的代码会接受一个IClock(可能依赖注射),然后用这个来确定你感兴趣的地区的当前日期。这样你就能写下你喜欢的任何情况的测试没有改变你的计算机时钟这是处理一般时间相关任务的好办法,海事组织。


在我们的框架内,我们采用了以下方法:

ZZU1


在这里,我找到了一个答案,我用LastIndexOf来解答我的问题,在我把float转换成string之前,把所有的字符串都从某个字符中删除。

很精确,试试看。注:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
   static void Main(string[] args)
    {
        string year, month, day = string.Empty;
        Console.WriteLine("Enter your Birthdate:");
        Console.WriteLine("Year :");
        year = Console.ReadLine();
        Console.WriteLine("Month :");
         month = Console.ReadLine();
        Console.WriteLine("Day :" );
        day = Console.ReadLine();
        try
        {
            DateTime date = Convert.ToDateTime(year +"-" + month +"-" + day);
             var bday = float.Parse(date.ToString("yyyy.MMdd"));
             var now = float.Parse(DateTime.Now.ToString("yyyy.MMdd"));
             if (now < bday)
             {
                 Console.WriteLine("Invalid Input of date");
                 Console.ReadLine();

             }
             string age = (now - bday).ToString();
             Console.WriteLine("Your Age is" + (age.Substring(0, age.LastIndexOf('.'))));
             Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            Console.ReadLine();
        }





        }