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