Convert a two digit year to a four digit year

前端 未结 17 883
误落风尘
误落风尘 2020-12-25 12:13

This is a question of best practices. I have a utility that takes in a two digit year as a string and I need to convert it to a four digit year as a string. right now I do <

相关标签:
17条回答
  • 2020-12-25 12:52

    My answer will not match your question but for credit cards I just add 2 digits of current year

        private int UpconvertTwoDigitYearToFour(int yearTwoOrFour)
        {
            try
            {
                if (yearTwoOrFour.ToString().Length <= 2)
                {
                    DateTime yearOnly = DateTime.ParseExact(yearTwoOrFour.ToString("D2"), "yy", null);
                    return yearOnly.Year;
                }
            }
            catch
            {
            }
    
            return yearTwoOrFour;
        }
    
    0 讨论(0)
  • 2020-12-25 12:52

    If you calculate for a person he will probably not be more than 100 years...

    Eg: 751212

    var nr = "751212";
    var century = DateTime.Now.AddYears(-100).Year.ToString().Substring(0, 2);
    
    var days = (DateTime.Now - DateTime.Parse(century + nr)).Days;
    decimal years = days / 365.25m;
    if(years>=99)
     century = DateTime.Now.Year.ToString().Substring(0, 2);
    
    var fullnr = century+nr;
    
    0 讨论(0)
  • 2020-12-25 12:53

    This solution we use for Expiration Dates, the user enters MM and YY into separate fields. This results in dates being the 31st or 30th and 28th or 29th also for February.

    /// <summary>
    /// Creates datetime for current century and sets days to end of month
    /// </summary>
    /// <param name="MM"></param>
    /// <param name="YY"></param>
    /// <returns></returns>
    public static DateTime GetEndOfMonth(string MM, string YY)
    {
        // YY -> YYYY #RipVanWinkle
        // Gets Current century and adds YY to it.
        // Minus 5 to allow dates that may be expired to be entered.
        // eg. today is 2017, 12 = 2012 and 11 = 2111
        int currentYear = DateTime.Now.Year;
        string thisYear = currentYear.ToString().Substring(0, 2) + YY;
        int month = Int32.Parse(MM);
        int year = Int32.Parse(thisYear);
        if ((currentYear - 5) > year)
            year += 100;
    
        return new DateTime(year, month, DateTime.DaysInMonth(year, month));
    }
    
    0 讨论(0)
  • 2020-12-25 12:57

    The .NET framework has a method that does exactly what you want:

    int fourDigitYear = CultureInfo.CurrentCulture.Calendar.ToFourDigitYear(twoDigitYear)
    

    That way you will correctly adhere to current regional settings as defined in Control Panel (or group policy):

    Regional settings

    0 讨论(0)
  • 2020-12-25 12:57

    This Method can convert the credit card last two year digits to four year


    private static int ToFourDigitYear(int year)
    {
        string stringYear = year.ToString("00");
        if (stringYear.Length == 2)
        {
            int currentYear = DateTime.Now.Year;
            string firstTwoDigitsOfCurrentYear = currentYear.ToString().Substring(0, 2);
            year = Convert.ToInt32(firstTwoDigitsOfCurrentYear + stringYear);
            if (year < currentYear)
                year = year + 100;
        }
        return year;
    }
    
    0 讨论(0)
提交回复
热议问题