简体   繁体   中英

String was not recognized as a valid DateTime

This is my first post here. The application is a winform I have set the culture for the application as en-GB but while checking and saving I convert it back to en-US I get this the error String was not recornized as a valid DateTime

CultureInfo currentCulture = new CultureInfo("en-US");
string strCheckDate = CheckConvertCulture(input);
string date = DateTime.Now.ToString("M/d/yyyy");

if (DateTime.ParseExact(strCheckDate,currentCulture.ToString(),null)> DateTime.ParseExact(date,currentCulture.ToString(),null))
{
      return false;
}
else
{
      return true;
}

What am I doing wrong here

This is my converCurrentCulture code

string strdate = string.Empty;
CultureInfo currentCulture = CultureInfo.CurrentCulture;
System.Globalization.DateTimeFormatInfo usDtfi = new System.Globalization.CultureInfo("en-US", false).DateTimeFormat;
if (currentCulture.ToString() != "en-US")
{
    strdate = Convert.ToDateTime(Culturedate).ToString(usDtfi.ShortDatePattern);
}
else
{
    strdate = Culturedate;
}

    return strdate;

This is what I did to get it to work, but if a user selects an invalid date like 29/02/2013 will it work not sure,

CultureInfo currentCulture = new CultureInfo("en-GB");
string date = DateTime.Now.ToString("dd/MM/yyyy", currentCulture);

Since the application is default to en-GB

if (DateTime.Parse(input) > DateTime.Parse(date))
{
  return false;
}
else
{
  return true;
}

If this is actually your code:

CultureInfo currentCulture = new CultureInfo("en-US");
string strCheckDate = CheckConvertCulture(input);

if (DateTime.ParseExact(strCheckDate,currentCulture.ToString(),null)

then the problem is in your ParseExact, which translates to

if (DateTime.ParseExact(strCheckDate, "en-US", null))

You would be better off specifying the date in a specific format, and parsing that:

string format = "MM/dd/yyyy HH:mm:ss";
string strCheckDate = input.ToString(format);

// See note below about "why are you doing this?    
if (DateTime.ParseExact(strCheckDate, format))

My big question is - why are you doing this? If you have two dates, why are you converting them both to strings, and then converting them back to dates to compare them?

return (input > date);

Please see the MSDN documentation for the proper use of DateTime.ParseExact.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM