// internally, CrissCross uses yyyy-mm-dd to pass dates from client to server
        // sometimes also needs to parse dates from executionlog that are in regional format
        // hence this tries specific regional format then general format.
        // Also FlexiEnGbUs is a magic option to try both Gb and Us in a safe way
        public DateParseResult ParseDateStringVariousWays(string dateString, string cultureCode)
        {
            var ret = new DateParseResult();

            DateTime parseResult;

            // first try specific culture
            // specific flexible option for gb/us dates
            if (cultureCode.ToLower().Equals("flexi-gb-us"))
            {
                if (dateString.EndsWith("12:00:00 AM"))
                {
                    cultureCode = "EN-US";
                }
                else if (dateString.EndsWith("00:00:00"))
                {
                    cultureCode = "EN-GB";
                }
                else
                {
                    cultureCode = null;
                }
            }
            if (cultureCode != null)
            {
                IFormatProvider culture = new CultureInfo(cultureCode, true);
                // parse using a culture code
                if (DateTime.TryParse(dateString, culture, DateTimeStyles.None, out parseResult))
                {
                    ret.CouldParse = true;
                    ret.DateTime   = parseResult;
                    return(ret);
                }
            }

            // then try generally
            if (DateTime.TryParse(dateString, out parseResult))
            {
                ret.CouldParse = true;
                ret.DateTime   = parseResult;
                return(ret);
            }
            ret.CouldParse = false;
            return(ret);
        }
        // internally, CrissCross uses yyyy-mm-dd to pass dates from client to server
        // sometimes also needs to parse dates from executionlog that are in regional format
        // hence this tries specific regional format then general format.
        // Also FlexiEnGbUs is a magic option to try both Gb and Us in a safe way
        public DateParseResult ParseDateStringVariousWays(string dateString, string cultureCode)
        {
            var ret = new DateParseResult();

            DateTime parseResult;
            // first try specific culture
            // specific flexible option for gb/us dates
            if (cultureCode.ToLower().Equals("flexi-gb-us"))
            {
                if (dateString.EndsWith("12:00:00 AM"))
                    cultureCode = "EN-US";
                else if (dateString.EndsWith("00:00:00"))
                    cultureCode = "EN-GB";
                else
                    cultureCode = null;
            }
            if (cultureCode != null)
            {
                IFormatProvider culture = new CultureInfo(cultureCode, true);
                // parse using a culture code
                if (DateTime.TryParse(dateString, culture, DateTimeStyles.None, out parseResult))
                {
                    ret.CouldParse = true;
                    ret.DateTime = parseResult;
                    return ret;
                }
            }

            // then try generally
            if (DateTime.TryParse(dateString, out parseResult))
            {
                ret.CouldParse = true;
                ret.DateTime = parseResult;
                return ret;
            }
            ret.CouldParse = false;
            return ret;
        }