C # DateTime всегда 01/01/0001, когда передается через параметры метода - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь проверить, больше ли DateTime, чем другой DateTime в методе, но когда я пытаюсь передать его через параметры, он говорит, что один из DateTime 01.010001, хотя я и не сделал передать его как таковой.

Метод:

int monthsCount2(DateTime date, DateTime birthday, int yOld)
            {
                int count = 0;
                if (birthday.Date >= date.Date)
                {
                    count++;
                    if (!(yOld == 0))
                        count += (yOld - 1);
                }
                else
                    count += yOld;
                return count;
            }

Используя метод:

Console.WriteLine("You have lived through {0} christmases.", 
monthsCount2(christmas, birthDay, (int)yearsOld));

Рождественская переменная:

DateTime christmas = new DateTime(25 / 12 / 2017);

переменная birthDay:

try
                {
                    Console.WriteLine("Please enter your Birthdate. (dd/MM/yyyy)");
                    string input = Console.ReadLine();
                    birthDay = DateTime.Parse(input);
                    if (birthDay > DateTime.Now)
                        throw new FormatException();
                }

лет Старая переменная:

TimeSpan secondsTimeSpan = DateTime.Now - birthDay;
                double secondsOld = Math.Round(secondsTimeSpan.TotalSeconds);
                double minutesOld = Math.Round(secondsOld / 60);
                double hoursOld = Math.Round(minutesOld / 60);
                double daysOld = Math.Round(hoursOld / 24);
                double weeksOld = Math.Round(daysOld / 7);
                double monthsOld = Math.Round(weeksOld / 4.34524);
                double yearsOld = Math.Round(monthsOld / 12, 1);

Ввод - Консоль:
Консоль - Имгур

Локальная отладка:
Местные жители - Имгур

Весь код:
код - Github

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Это неправильный синтаксис (или, по крайней мере, не тот, который вы думаете)

DateTime christmas = new DateTime(25 / 12 / 2017);

Числовые значения являются целыми числами, а '/' делится.

Вместо этого вы хотите сделать что-то вроде этого:

DateTime christmas = new DateTime(2017, 12, 25);

или

DateTime christmas = new DateTime.Parse("12/25/2017");

Формат последнего зависит от культуры.

0 голосов
/ 05 июля 2018

Правильный синтаксис для инициализации экземпляра datetime следующий:

var christmas = new DateTime(2017, 12, 25);

Конструктор задокументирован здесь .

И причина, по которой ваш подход не сработал:

Вы делите 25 на 12, а затем делите результат этого на 2017. В качестве целого числа это будет ноль, в качестве даты это будет DateTime.MinValue, что 01/01/0001.

Так почему же компилятор не отклоняет ваш пробный литерал даты? Поскольку существует конструктор , который принимает Int64, который соответствует выражению деления. Тем не менее, он имеет совершенно другую семантику, он представляет

количество интервалов в 100 наносекунд, прошедших с 1 января 0001 года в 00: 00: 00.000 по григорианскому календарю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...