Comment initialiser un champ DateTime?

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

j'ai d'initialisation DateTime les champs d'un objet, mais j'ai quelques problèmes à le faire.

En particulier, je suis en train de inizialize ces champs de cette façon:

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

Mais Visual Studio me signer comme erreur

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

Ce qui me manque? Comment faire pour résoudre il?

19
demandé sur Dharmesh 2014-02-20 15:50:44

9 réponses

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

Ou peut-être comme ceci

var date = DateTime.MinValue;
if (DateTime.TryParse("1998/04/30", out date))
{
    //Sucess...
    mySmallVuln.Published = date;
}
28
répondu thomas 2014-02-20 12:04:16
 DateTime d = default(DateTime);

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

10
répondu Lai 2015-01-20 07:24:07

les deux sont identiques....

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 attribuer hour minute et second respectivement en paramètre aux trois derniers paramètres.

6
répondu Shell 2014-02-20 11:55:55

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

mySmallVuln.Published = new DateTime(1998,04,30);
3
répondu Neil Knight 2014-02-20 11:53:48

Vous utilisez un caractère littéral '' qui ne peut contenir qu'un seul caractère. Si vous souhaitez utiliser un littéral de chaîne d'utiliser "" à la place.

C# ne supporte pas DateTime - littérales 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 l'analyser pour DateTime le premier:

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 par le constructeur:

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

ou, depuis votre chaîne contient l'année, le mois et le jour comme Chaînes, en utilisant 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);
}
3
répondu Tim Schmelter 2014-02-20 12:03:56

malheureusement, C# ne supporte pas les datations littérales. 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 approfondir ce sujet: VB.NET soutient datent littérals en utilisant le caractère # (ironiquement). C'est ainsi qu'elles peuvent être exprimées, à partir du MSDN documentation:

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
répondu rla4 2014-02-20 11:58:05

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

C'est parce que, en C#, les apostrophes (") désigne (ou encapsulation) un caractère unique, alors que les guillemets doubles ("") sont utilisés pour une chaîne de caractères.

de Sorte que vous aurez à essayer:

DateTime foo = "2014,02,20";

ce Qui donne:

impossible de convertir implicitement le type 'string' en ' System.DateTime'

Maintenant, si vous rechercher erreur, vous aurez trouver:

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

DateTime dt = new DateTime(StartYear, StartMonth, StartDay);
2
répondu CodeCaster 2017-05-23 12:18:07

utiliser ce

// année,mois,jour

mySmallVuln.Published=new DateTime(2011,11,4);
1
répondu gericooper 2014-02-20 11:53:42

Vous pouvez soit Parser une corde, 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
répondu Terje 2014-02-20 11:56:17