Need parse dd.MM.yyyy to DateTime using TryParse

前端 未结 8 1713
孤街浪徒
孤街浪徒 2021-01-17 09:51

I need to parse string to DateTime. The string is always in the following format

\"10.10.2010\" That means dd.MM.yyyy, separated with dots.

I want to use Dat

相关标签:
8条回答
  • 2021-01-17 10:30

    TryParse doesn't let you specify the format - but you can use TryParseExact:

    DateTime date;
    if (DateTime.TryParseExact(text, "dd'.'MM'.'yyyy",
                               CultureInfo.InvariantCulture,
                               DateTimeStyles.None,
                               out date))
    {
       // Success
    }
    else
    {
       // Parse failed
    }
    

    Note that the dot doesn't strictly need to be escaped with the quotes, but personally I like to put any literal text in quotes just to make sure that it won't be changed. It's a personal preference thing though - you could certainly just use "dd.MM.yyyy" if you wanted.

    Likewise I've specified the invariant culture which is what I normally do for a fixed custom style - but you could make it use the current culture or a specific other culture if you wanted. When you're using a custom style (rather than a standard style such as "long date") it's less likely to make any difference, admittedly.

    0 讨论(0)
  • 2021-01-17 10:31

    You can use DateTime.TryParseExact

    0 讨论(0)
  • 2021-01-17 10:33

    use DateTime.TryParseExact(...)

    0 讨论(0)
  • 2021-01-17 10:35

    Why not use ParseExact instead?

    var theDate = DateTime.ParseExact("dd.MM.yyyy", yourDateString, CultureInfo.InvariantCulture);
    
    0 讨论(0)
  • 2021-01-17 10:35

    I have found that jquery datepicker will add non-printable characters in the string. So, when you try to convert to another format, it will throw an invalid date error every time. In my case, I was just trying to convert it back to a time stamp from whatever culture the user was in at the time. It's a somewhat hacky approach, but it worked for me.

        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 讨论(0)
  • 2021-01-17 10:46

    Use the TryParseExact method:

    DateTime parsed;
    if (DateTime.TryParseExact(yourString, "dd'.'MM'.'yyyy",
        CultureInfo.CurrentCulture, DateTimeStyles.None, out parsed))
    {
        // success
    }
    
    0 讨论(0)
提交回复
热议问题