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 FormatProvider
in 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.
- Datumnotaties die u correct gebruikt. U kunt meer dan één indeling opgeven voor
DateTime.TryParseExact
. Bekijk de volledige lijst met indelingen, die hierbeschikbaar is. -
CultureInfo.InvariantCulture
wat waarschijnlijk een add-probleem is. Dus in plaats van eenNULL
waarde ofin te stellen opCultureInfo 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