J'ai besoin d'analyser la chaîne à DateTime. La chaîne est toujours au format suivant
"10.10.2010" Cela signifie jj.MM.yyyy, séparés par des points.
Je veux utiliser DateTime.TryParse ou toute autre méthode. Veuillez suggérer.
METTRE À JOUR
Mise à jour de la question. Je cherche simplement la bonne méthode pour atteindre l'objectif. L'analyse manuelle n'est pas manuelle
TryParse
ne vous permet pas de spécifier le format - mais vous pouvez utiliser TryParseExact
:
DateTime date;
if (DateTime.TryParseExact(text, "dd'.'MM'.'yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out date))
{
// Success
}
else
{
// Parse failed
}
Notez que le point n'a pas besoin d'être échappé des guillemets, mais personnellement, j'aime mettre tout texte littéral entre guillemets pour m'assurer qu'il ne sera pas modifié. C'est une question de préférence personnelle, vous pouvez certainement utiliser «jj.mm.aaaa» si vous le souhaitez.
De même, j'ai spécifié la culture invariante, ce que je fais normalement pour un style personnalisé fixe, mais vous pouvez lui faire utiliser la culture actuelle ou une autre culture spécifique si vous le souhaitez. Lorsque vous utilisez un style personnalisé (plutôt qu'un style standard tel que "date longue"), il est moins probable que cela fasse une différence.
Utilisez la méthode TryParseExact
:
DateTime parsed;
if (DateTime.TryParseExact(yourString, "dd'.'MM'.'yyyy",
CultureInfo.CurrentCulture, DateTimeStyles.None, out parsed))
{
// success
}
Pourquoi ne pas utiliser ParseExact
à la place?
var theDate = DateTime.ParseExact("dd.MM.yyyy", yourDateString, CultureInfo.InvariantCulture);
Codec Brésil
public static bool IsDateTime(string txtDate)
{
DateTime tempDate;
return DateTime.TryParseExact(txtDate,"dd/MM/yyyy",
new CultureInfo("pt-BR"),
DateTimeStyles.None, out tempDate);
}
utiliser DateTime.TryParseExact (...)
Vous pouvez utiliser DateTime.TryParseExact
essayez "ddMMyyy", sans "- /".
J'ai trouvé que jquery datepicker ajoutera des caractères non imprimables à la chaîne. Ainsi, lorsque vous essayez de convertir en un autre format, une erreur de date non valide est générée à chaque fois. Dans mon cas, j'essayais simplement de le reconvertir en horodatage quelle que soit la culture de l'utilisateur C'est une approche quelque peu maladroite, mais cela a fonctionné pour moi.
static public string ToDigitsOnly(string input)
{
Regex digitsOnly = new Regex(@"[^\d]");
return digitsOnly.Replace(input, "");
}
static private DateTime ConvertDateTimeToDate(string dateTimeString, String langCulture)
{
System.DateTime result;
string[] dateString = dateTimeString.Split('/');
try
{
if (langCulture != "en")
{
int Year = Convert.ToInt32(ToDigitsOnly(dateString[2]));
int Month = Convert.ToInt32(ToDigitsOnly(dateString[1]));
int Day = Convert.ToInt32(ToDigitsOnly(dateString[0]));
result = new DateTime(Year, Month, Day, 00, 00, 00);
}
else
{
int Year = Convert.ToInt32(dateString[2]);
int Month = Convert.ToInt32(dateString[0]);
int Day = Convert.ToInt32(dateString[1]);
result = new DateTime(Year, Month, Day, 00, 00, 00);
}
}
catch
{
// last attempt
result = Convert.ToDateTime(dateTimeString, CultureInfo.GetCultureInfo("en-US"));
}
return result;
}