Подтвердить что ты не робот

Как инициализировать поле DateTime?

Я абсолютно новый в С# (я пришел из Java), и у меня очень глупая проблема

Мне нужно инициализировать несколько полей DateTime в объекте, но у меня есть некоторые проблемы с этим.

В частности, я пытаюсь инициализировать эти поля следующим образом:

mySmallVuln.Published = '1998,04,30';
mySmallVuln.LastUpdated = '2007,11,05';

Но Visual Studio подпишет мне это как ошибку

Слишком много символов в буквальном символе

Что мне не хватает? Как его решить?

4b9b3361

Ответ 1

mySmallVuln.Published = new DateTime(1998,04,30);

Или, может быть, как это

var date = DateTime.MinValue;
if (DateTime.TryParse("1998/04/30", out date))
{
    //Sucess...
    mySmallVuln.Published = date;
}

Ответ 2

 DateTime d = default(DateTime);

Ключевое слово по умолчанию работает и для всех типов данных!

Ответ 3

Оба одинаковы....

1

mySmallVuln.Published = new DateTime(1998,04,30,0,0,0);
mySmallVuln.LastUpdated = new DateTime(2007,11,05,0,0,0);

2

mySmallVuln.Published = new DateTime(1998,04,30);
mySmallVuln.LastUpdated = new DateTime(2007,11,05);

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

Ответ 4

Вы используете символьный литерал '', который может содержать только один символ. Если вы хотите использовать строковый литерал, используйте "" вместо этого.

С# не поддерживает DateTime -литераторы в отличие от VB.NET (#4/30/1998#).

Кроме того, строка не является DateTime. Если у вас есть строка, вам нужно сначала проанализировать ее на DateTime:

string published = "1998,04,30";
DateTime dtPublished = DateTime.ParseExact(published, "yyyy,MM,dd", CultureInfo.InvariantCulture);
mySmallVuln.Published = dtPublished; 

или вы можете создать конструктор DateTime через конструктор:

DateTime dtPublished = new DateTime(1998, 04, 30);

или, поскольку ваша строка содержит год, месяц и день в виде строк, используя String.Split и int.Parse:

string[] tokens = published.Split(',');
if (tokens.Length == 3 && tokens.All(t => t.All(Char.IsDigit)))
{
    int year = int.Parse(tokens[0]);
    int month = int.Parse(tokens[1]);
    int day = int.Parse(tokens[2]);
    dtPublished = new DateTime(year, month, day);
}

Ответ 5

Чтобы инициализировать значение DateTime, вы можете использовать конструктор DateTime:

mySmallVuln.Published = new DateTime(1998,04,30);

Ответ 6

К сожалению, С# не поддерживает литералы Date. Вы должны изменить свой код и создать экземпляр объектов DateTime с помощью new DateTime(..), как показано в его ответе.

Просто ради расширения на эту тему: VB.NET поддерживает литералы даты с использованием символа # (по иронии судьбы). Вот как они могут быть выражены из документации MSDN:

Dim d As Date
d = # 8/23/1970 3:45:39AM #
d = # 8/23/1970 #              ' Date value: 8/23/1970 12:00:00AM.
d = # 3:45:39AM #              ' Date value: 1/1/1 3:45:39AM.
d = # 3:45:39 #                ' Date value: 1/1/1 3:45:39AM.
d = # 13:45:39 #               ' Date value: 1/1/1 1:45:39PM.
d = # 1AM #                    ' Date value: 1/1/1 1:00:00AM.
d = # 13:45:39PM #             ' This date value is not valid.

Ответ 7

Если вы ищете ошибку, которую вы получите, вы найдите:

Это потому, что в С# одиночные кавычки ('') обозначают (или инкапсулируют) один символ, тогда как двойные кавычки ("") используются для строки символов.

Итак, вы попробуете:

DateTime foo = "2014,02,20";

Что дает:

Невозможно неявно преобразовать тип 'string' в 'System.DateTime'

Теперь, если вы ищете эту ошибку, вы найдите:

int StartYear = 2012;
int StartMonth = 06;
int StartDay = 15;

DateTime dt = new DateTime(StartYear, StartMonth, StartDay);

Ответ 8

используйте этот

//год, месяц, день

mySmallVuln.Published=new DateTime(2011,11,4);

Ответ 9

Вы можете либо проанализировать строку, как ваш. Или вы можете установить объект DateTime с номерами.

DateTime date1 = new DateTime(1998, 04, 30);
DateTime date2 = DateTime.ParseExact("1998,04,30", "yyyy,MM,dd", CultureInfo.InvariantCulture);