web-dev-qa-db-fra.com

Besoin d'analyser dd.MM.yyyy à DateTime à l'aide de TryParse

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

19
Captain Comic

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.

44
Jon Skeet

Utilisez la méthode TryParseExact :

DateTime parsed;
if (DateTime.TryParseExact(yourString, "dd'.'MM'.'yyyy",
    CultureInfo.CurrentCulture, DateTimeStyles.None, out parsed))
{
    // success
}
7
LukeH

Pourquoi ne pas utiliser ParseExact à la place?

var theDate = DateTime.ParseExact("dd.MM.yyyy", yourDateString, CultureInfo.InvariantCulture);
4

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);
}
4
Alexanre
3
Itay Karo

Vous pouvez utiliser DateTime.TryParseExact

2
Dror

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;
    }
0