fCraft.FlatfilePlayerDBProvider.TryParseLocalDate C# (CSharp) Method

TryParseLocalDate() public static method

Tries to parse a data in a culture-specific ways. This method is, unfortunately, necessary because in versions 0.520-0.522, fCraft saved dates in a culture-specific format. This means that if the server's culture settings were changed, or if the PlayerDB and IPBanList files were moved between machines, all dates became unparseable.
public static TryParseLocalDate ( [ dateString, System.DateTime &date ) : bool
dateString [ String to parse.
date System.DateTime Date to output.
return bool
        public static bool TryParseLocalDate( [NotNull] string dateString, out DateTime date ) {
            if( dateString == null ) throw new ArgumentNullException( "dateString" );
            if( dateString.Length <= 1 ) {
                date = DateTime.MinValue;
                return false;
            } else {
                if( !DateTime.TryParse( dateString, cultureInfo, DateTimeStyles.None, out date ) ) {
                    CultureInfo[] cultureList = CultureInfo.GetCultures( CultureTypes.AllCultures );
                    foreach( CultureInfo otherCultureInfo in cultureList ) {
                        cultureInfo = otherCultureInfo;
                        try {
                            if( DateTime.TryParse( dateString, cultureInfo, DateTimeStyles.None, out date ) ) {
                                date = date.ToUniversalTime();
                                return true;
                            }
                        } catch( NotSupportedException ) { }
                    }
                    throw new Exception( "Could not find a culture that would be able to parse date/time formats." );
                } else {
                    return true;
                }
            }
        }

Usage Example

Example #1
0
        internal static IPBanInfo LoadFormat0([NotNull] string[] fields, bool convertDatesToUtc)
        {
            if (fields == null)
            {
                throw new ArgumentNullException("fields");
            }
            if (fields.Length != 8)
            {
                throw new ArgumentException("Unexpected field count", "fields");
            }
            IPBanInfo info = new IPBanInfo {
                Address  = IPAddress.Parse(fields[0]),
                BannedBy = FlatfilePlayerDBProvider.UnescapeOldFormat(fields[1])
            };

            FlatfilePlayerDBProvider.TryParseLocalDate(fields[2], out info.BanDate);
            info.BanReason = FlatfilePlayerDBProvider.UnescapeOldFormat(fields[3]);
            if (fields[4].Length > 1)
            {
                info.PlayerName = FlatfilePlayerDBProvider.UnescapeOldFormat(fields[4]);
            }

            info.Attempts        = Int32.Parse(fields[5]);
            info.LastAttemptName = FlatfilePlayerDBProvider.UnescapeOldFormat(fields[6]);
            FlatfilePlayerDBProvider.TryParseLocalDate(fields[7], out info.LastAttemptDate);

            if (convertDatesToUtc)
            {
                if (info.BanDate != DateTime.MinValue)
                {
                    info.BanDate = info.BanDate.ToUniversalTime();
                }
                if (info.LastAttemptDate != DateTime.MinValue)
                {
                    info.LastAttemptDate = info.LastAttemptDate.ToUniversalTime();
                }
            }

            return(info);
        }