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?
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;
}
DateTime d = default(DateTime);
le mot-clé par défaut fonctionne aussi pour tous les types de données!
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.
Pour initialiser un DateTime
valeur, vous pouvez utiliser le DateTime
constructeur:
mySmallVuln.Published = new DateTime(1998,04,30);
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);
}
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.
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);
utiliser ce
// année,mois,jour
mySmallVuln.Published=new DateTime(2011,11,4);
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);