DateTime.TryParseExact() verwerpt geldige formaten

Ik ben een DateTime-waarde aan het ontleden op een ASP.NET WebForms-pagina en de datumtekenreeks wordt steeds afgewezen door de DateTime.TryParseExact()-methode, ook al is dit duidelijk komt overeen met een van de opgegeven formaatreeksen.

Het lijkt te mislukken op mijn ontwikkelmachine thuis, maar het werkt op de productieserver, dus ik denk aan lokale datum-instellingen, maar deze fout treedt zelfs op als ik een IFormatProvider (CultureInfo)object als parameter

Hier is de code:

DateTime startDate;
string[] formats = { "dd/MM/yyyy", "dd/M/yyyy", "d/M/yyyy", "d/MM/yyyy",
                    "dd/MM/yy", "dd/M/yy", "d/M/yy", "d/MM/yy"};
var errStart = row.FindControl("errStartDate"); //my date format error message
if (!DateTime.TryParseExact(txtStartDate.Text, formats, null, DateTimeStyles.None, out startDate))
{
    errStart.Visible = true; //we get here even with a string like "20/08/2012"
    return false;
}
else
{
    errStart.Visible = false;
}

Opmerking: ik geef een null FormatProviderin het bovenstaande, maarhetzelfde probleem doet zich voor wanneer ik een CultureInfo-object opgeef als
(CultureInfo provider = new CultureInfo("en-US"))voor deze parameter.

Wat mis ik?


Antwoord 1, autoriteit 100%

Probeer:

DateTime.TryParseExact(txtStartDate.Text, formats, 
        System.Globalization.CultureInfo.InvariantCulture,
        System.Globalization.DateTimeStyles.None, out startDate)

Antwoord 2, autoriteit 6%

Hier kun je een aantal dingen controleren.

  1. Datumnotaties die u correct gebruikt. U kunt meer dan één indeling opgeven voor DateTime.TryParseExact. Bekijk de volledige lijst met indelingen, die hierbeschikbaar is.
  2. CultureInfo.InvariantCulturewat waarschijnlijk een add-probleem is. Dus in plaats van een NULLwaarde ofin te stellen op CultureInfo provider = new CultureInfo("en-US"), kun je het schrijven als .
    .

    if (!DateTime.TryParseExact(txtStartDate.Text, formats, 
                    System.Globalization.CultureInfo.InvariantCulture,
                    System.Globalization.DateTimeStyles.None, out startDate))
    {
        //your condition fail code goes here
        return false;
    }
    else
    {
        //success code
    }
    

Antwoord 3, autoriteit 6%

Dit is de eenvoudige methode, gebruik ParseExact

CultureInfo provider = CultureInfo.InvariantCulture;
DateTime result;
String dateString = "Sun 08 Jun 2013 8:30 AM -06:00";
String format = "ddd dd MMM yyyy h:mm tt zzz";
result = DateTime.ParseExact(dateString, format, provider);

Dit zou voor u moeten werken.


Antwoord 4, autoriteit 2%

Probeer C# 7.0

var Dob= DateTime.TryParseExact(s: YourDateString,format: "yyyyMMdd",provider: null,style: 0,out var dt)
 ? dt : DateTime.Parse("1800-01-01");

Antwoord 5, autoriteit 2%

string DemoLimit = "02/28/2018";
 string pattern = "MM/dd/yyyy";
 CultureInfo enUS = new CultureInfo("en-US"); 
 DateTime.TryParseExact(DemoLimit, pattern, enUS, 
                     DateTimeStyles.AdjustToUniversal, out datelimit);

Voor meer https://msdn. microsoft.com/en-us/library/ms131044(v=vs.110).aspx

Other episodes