将一年从4位数字转换为2位数字,然后再用 C # 转换回来

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

  1. 我把4位数年份的 DropDownList放在纸上。
  2. 我在 DateTime字段中验证过期日期,以确保传递给 CC 处理器的过期日期没有过期。
  3. 我发送一个两位数字的年份到 CC 处理器(如需要)。我通过年份 DDL 的值的子字符串来完成此操作。

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

179058 次浏览

此时,最简单的方法就是截断年份的最后两位数字。对于信用卡来说,过去有一个日期是没有必要的,所以 Y2K 没有任何意义。如果您的代码在90年以上的时间里仍然在运行,那么同样的情况也会发生。

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

为什么不在页面上的原始下拉框只是一个2位数字的值?当查看年份时,信用卡只能覆盖很小的范围,特别是如果 CC 供应商已经接受了2位数的信用卡。

即使存在一种内建的方式,它也不会比现在更好地验证它,而且它与子字符串调用几乎没有什么不同。我不担心。

例如,使用带有自定义格式字符串(如 myDate.toString (“ MM/dd/广州欢聚时代”))的 DateTime 对象 ToString。

如果使用过期日期(月/年)创建 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 中有任何特殊的内置东西。

更新 : 它缺少一些您可能应该进行的验证。验证输入变量的长度,等等。

这里有一个4Guy 文章的链接,这篇文章介绍了如何使用 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/en-us/library/system.globalization.datetimeformatinfo.aspx

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

//using java script
var curDate = new Date();
var curYear = curDate.getFullYear();
curYear = curYear.toString().slice(2);
document.write(curYear)
//using java script
//using sqlserver
select Right(Year(getDate()),2)
//using sql server
//Using c#.net
DateTime dt = DateTime.Now;
string curYear = dt.Year.ToString().Substring(2,2).ToString()  ;
//using c#.net
DateTime.Now.Year - (DateTime.Now.Year / 100 * 100)

适用于当年。更改 DateTime.Now.Year,使其也适用于另一年。

第一个解决方案 (最快) :

yourDateTime.Year % 100

第二种解决方案 (我认为更优雅) :

yourDateTime.ToString("yy")

这是一篇老文章,但是我想我会给出一个使用 ExtensionMethod的例子(从 C # 3.0开始) ,因为这将隐藏实现,并且允许在项目的任何地方使用,或者一遍又一遍地重新创建代码,或者需要注意一些实用程序类。

扩展方法使您能够向现有类型“添加”方法 而不需要创建新的派生类型、重新编译或以其他方式 修改原始类型。扩展方法是一种特殊的 方法,但是它们的调用方式就好像它们是 对于用 C # 和 Visual Basic 编写的客户端代码, 调用扩展方法之间没有明显的区别 以及在类型中实际定义的方法。

public static class DateTimeExtensions
{
public static int ToYearLastTwoDigit(this DateTime date)
{
var temp = date.ToString("yy");
return int.Parse(temp);
}
}

然后,您可以在使用 DateTime对象的任何地方调用此方法,例如..。

var dateTime = new DateTime(2015, 06, 19);
var year = cob.ToYearLastTwoDigit();

答案很简单:

DateTime Today = DateTime.Today;
string zeroBased = Today.ToString("yy-MM-dd");

答案已经给出了,但在这里我想补充一些东西。 有人告诉它不工作。

也许你正在使用

DateTime.Now.Year.ToString("yy");

这就是为什么它不工作。我也犯了同样的错误。

改成

DateTime.Now.ToString("yy");

我觉得这样挺好的。 yourDateTime.ToString().Substring(2);

从 c # 6.0开始,您可以在处理 c # 的任何东西(比如 MVC Razor 页面)上使用 字符串插值中的内置复合格式。

DateTime date = DateTime.Now;


string myTwoDigitYear = $"{date:yy};

不需要延期。可以在花括号内的任何有效 DateTime 对象后面的冒号后面使用大部分 标准日期和时间格式字符串,以使用内置的 复合格式