将年份从4位数转换为2位数,然后在C#中再次返回
我的信用卡处理器要求我从信用卡到期日起发送两位数的年份。这是我目前正在处理的方式:
- 我在页面上放置了一个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
这样做而不是使用子字符串可能更一致,但是谁知道。