将年份从4位数转换为2位数,然后在C#中再次返回

时间:2020-03-06 14:32:39  来源:igfitidea点击:

我的信用卡处理器要求我从信用卡到期日起发送两位数的年份。这是我目前正在处理的方式:

  • 我在页面上放置了一个4位数字年份的DropDownList
  • 我在" DateTime"字段中验证了到期日期,以确保传递给CC处理器的到期日期没有到期。
  • 我将两位数字的年份发送给CC处理器(根据需要)。我通过年份DDL中值的子字符串来完成此操作。

有没有一种方法可以将四位数的年份转换为两位数的年份。我没有在" DateTime"对象上看到任何东西。还是我应该继续处理它?

解决方案

此时,最简单的方法是截断年份的最后两位数字。对于信用卡来说,过去的日期是不必要的,因此Y2K毫无意义。如果代码仍在90多年后仍在运行,则同样适用。

我会进一步说,让用户自己输入年份而不是使用下拉列表。这是一种常用的方法,大多数用户都可以处理。

为什么页面上的原始下拉列表不是仅2位数字的值?当查看年份时,信用卡仅覆盖很小的范围,特别是如果CC供应商已经使用了两位数的话。

即使存在内置方式,也无法将其验证为比今天更大的方式,并且它与子字符串调用的区别很小。我不会担心。

例如,将DateTime对象ToString与自定义格式字符串一起使用,例如myDate.ToString(" MM / dd / yy")。

如果要使用到期日期(月/年)创建DateTime对象,则可以在DateTime变量上使用ToString(),如下所示:

DateTime expirationDate = new DateTime(2008, 1, 31); // random date
string lastTwoDigitsOfYear = expirationDate.ToString("yy");

编辑:如果在验证过程中使用DateTime对象,则请注意日期。如果有人选择05/2008作为卡的失效日期,则失效日期为5月底,而不是第一天。

我已经看到一些系统决定该临界值为75. 75+是19xx,以下是20xx。

这应该为我们工作:

public int Get4LetterYear(int twoLetterYear)
{
    int firstTwoDigits =
        Convert.ToInt32(DateTime.Now.Year.ToString().Substring(2, 2));
    return Get4LetterYear(twoLetterYear, firstTwoDigits);
}

public int Get4LetterYear(int twoLetterYear, int firstTwoDigits)
{
    return Convert.ToInt32(firstTwoDigits.ToString() + twoLetterYear.ToString());
}

public int Get2LetterYear(int fourLetterYear)
{
    return Convert.ToInt32(fourLetterYear.ToString().Substring(2, 2));
}

我认为.NET中没有任何特殊的内置内容。

更新:它缺少我们可能应该做的一些验证。验证输入变量的长度,依此类推。

这是4Guys文章的链接,该文章介绍如何通过传入自定义格式字符串来使用ToString()方法设置日期和时间的格式。

http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=181

以防万一,这里是示例之一。

'Create a var. named rightNow and set it to the current date/time
Dim rightNow as DateTime = DateTime.Now
Dim s as String 'create a string

s = rightNow.ToString("MMM dd, yyyy")

由于他的链接已断开,这里是指向DateTimeFormatInfo类的链接,该类使这些格式化选项成为可能。

http://msdn.microsoft.com/zh-CN/library/system.globalization.datetimeformatinfo.aspx

这样做而不是使用子字符串可能更一致,但是谁知道。