web-dev-qa-db-fra.com

Comment initialiser un champ DateTime?

Je suis absolument nouveau en C # (je viens de Java) et j'ai un problème très stupide

Je dois initialiser certains champs DateTime dans un objet mais j'ai des problèmes pour le faire.

En particulier, j'essaie d'initialiser ces domaines de cette manière:

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

Mais Visual Studio le signe comme une erreur

Trop de caractères dans le caractère littéral

Qu'est-ce que je rate? Comment le résoudre?

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

Ou peut-être comme ça

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

Le mot-clé par défaut fonctionne également pour tous les types de données!

12
Lai

Les deux sont les même....

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);

dans la première méthode, vous pouvez affecter respectivement heure minute et seconde en paramètre aux trois derniers paramètres.

6
Shell

Pour initialiser une valeur DateTime, vous pouvez utiliser le constructeur DateTime:

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

Vous utilisez un caractère littéral '' qui ne peut contenir qu'un seul caractère. Si vous souhaitez utiliser une chaîne littérale, utilisez "" au lieu.

C # ne prend pas en charge les littéraux DateTime- par opposition à VB.NET (#4/30/1998#).

En dehors de cela, une chaîne n'est pas un DateTime. Si vous avez une chaîne, vous devez d'abord l'analyser en DateTime:

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

ou vous pouvez créer un DateTime via le constructeur:

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

ou, puisque votre chaîne contient l'année, le mois et le jour sous forme de chaînes, utilisez String.Split et 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);
}
4
Tim Schmelter

Si vous recherchez l'erreur que vous obtenez, vous allez trouver :

En effet, en C #, les guillemets simples ('') désignent (ou encapsulent) un seul caractère, tandis que les guillemets doubles ("") sont utilisés pour une chaîne de caractères.

Vous allez donc essayer:

DateTime foo = "2014,02,20";

Ce qui donne:

Impossible de convertir implicitement le type 'chaîne' en 'System.DateTime'

Maintenant, si vous recherchez cette erreur , vous allez trouver :

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

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

Malheureusement, C # ne prend pas en charge les littéraux Date. Vous devez changer votre code et instancier les objets DateTime en utilisant new DateTime(..), comme Thomas l'a illustré dans sa réponse.

Juste pour développer ce sujet: VB.NET prend en charge les littéraux de date en utilisant le caractère # (ironiquement). Voici comment les exprimer, à partir de la documentation 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.
2
rla4

utilisez ceci

// année mois jour

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

Vous pouvez soit analyser une chaîne, comme la vôtre. Ou vous pouvez instancier un objet DateTime avec des nombres.

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