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

  1. 我放了一个 DropDownList 页面上的 4 位数年份。
  2. 我验证过期日期 DateTime 字段以确保传递给 CC 处理器的到期日期尚未到期。
  3. 我向 CC 处理器发送两位数的年份(根据需要)。我通过年份 DDL 中的值的子字符串来执行此操作。

有没有一种方法可以将四位数年份转换为两位数年份。我没有看到任何内容 DateTime 目的。或者我应该继续按原样处理它?

有帮助吗?

解决方案

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

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

编辑:不过,如果您在验证期间使用 DateTime 对象,请注意日期。如果有人选择 05/2008 作为卡的到期日期,则卡将在 5 月底到期,而不是月初。

其他提示

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

yourDateTime.Year % 100

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

yourDateTime.ToString("yy")

答案已经给出了。但在这里我想补充一点。有人说这不起作用。

可能你正在使用

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

这就是它不起作用的原因。我也犯过同样的错误。

将其更改为

DateTime.Now.ToString("yy");

这应该适合你:

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 中有任何特殊的内置东西。

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

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

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

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

我见过一些系统决定截止值为 75;75以上为19xx,以下为20xx。

//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 让它再工作一年。

为什么页面上的原始下拉列表不只是 2 位数的值?从年份来看,信用卡仅涵盖很小的跨度,尤其是如果 CC 供应商已经只接受 2 位数的话。

以下是 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/en-us/library/system.globalization.datetimeformatinfo.aspx

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

这是一篇旧文章,但我想我应该举一个使用 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);
        }
    }

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

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

答案很简单:

今天的日期时间 = DateTime.Today;字符串zeroBased = Today.ToString("yy-MM-dd");

这似乎对我来说没问题。yourDateTime.ToString().Substring(2);

即使存在内置方法,它也不会验证它是否比现在更好,并且它与子字符串调用几乎没有什么不同。我不会担心这个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top