69

私のクレジット カード プロセッサでは、クレジット カードの有効期限から 2 桁の年を送信する必要があります。これが私が現在処理している方法です:

  1. DropDownListページに 4 桁の年のa を付けました。
  2. フィールドの有効期限を検証DateTimeして、CC プロセッサに渡される有効期限が切れていないことを確認します。
  3. CC プロセッサに 2 桁の年を送信します (必要に応じて)。これは、年の DDL の値の部分文字列を介して行います。

4 桁の年を 2 桁の年に変換する方法はありますか。DateTime物体には何も見えません。それとも、そのまま処理し続けるべきですか?

4

16 に答える 16

117

有効期限 (月/年) を使用して DateTime オブジェクトを作成している場合は、次のように DateTime 変数で ToString() を使用できます。

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

編集:検証中に DateTime オブジェクトを使用する場合は、日付に注意してください。カードの有効期限として 2008 年 5 月を選択した場合、有効期限は 5 月末であり、1 日ではありません。

于 2008-09-22T15:17:53.343 に答える
5

これはあなたのために働くはずです:

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 には特別な組み込み機能はないと思います。

更新:おそらく行うべきいくつかの検証がありません。入力変数の長さなどを検証します。

于 2008-09-22T15:22:47.497 に答える
2

たとえば、DateTime オブジェクト ToString を myDate.ToString("MM/dd/yy") のようなカスタム フォーマット文字列と共に使用します。

于 2008-09-22T15:17:09.383 に答える
2
//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
于 2011-04-16T09:52:58.213 に答える
2

C# 6.0 以降では、MVC Razor ページのように、c# を処理するすべての文字列補間で組み込みの複合書式設定を使用できます。

DateTime date = DateTime.Now;

string myTwoDigitYear = $"{date:yy};

拡張子は必要ありません。中括弧内の有効な DateTime オブジェクトの後、コロンの後に標準の日付と時刻の形式文字列のほとんどを使用して、組み込みの複合書式を使用できます。

于 2021-06-07T15:35:50.437 に答える
1

一部のシステムがカットオフを 75 と決定するのを見てきました。75+ は 19xx、それ以下は 20xx です。

于 2008-09-22T15:18:39.707 に答える
1

答えは非常に簡単です。

DateTime Today = DateTime.Today;
string zeroBased = Today.ToString("yy-MM-dd");
于 2016-10-25T08:22:00.603 に答える
1

この時点で、最も簡単な方法は、年の下 2 桁を切り捨てることです。クレジットカードの場合、過去の日付は必要ないので Y2K は意味がありません。コードが 90 年以上も実行されている場合にも同じことが当てはまります。

さらに言えば、ドロップダウン リストを使用する代わりに、ユーザーが自分で年を入力できるようにします。これは一般的な方法であり、ほとんどのユーザーが処理できます。

于 2008-09-22T15:15:28.607 に答える
1
DateTime.Now.Year - (DateTime.Now.Year / 100 * 100)

現在の年で動作します。DateTime.Now.Yearもう一年も使えるように変更。

于 2011-06-04T07:09:23.290 に答える
0

ToString() メソッドを使用してカスタム書式文字列を渡して日付と時刻を書式設定する方法に関する 4Guys の記事へのリンクを次に示します。

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

念のため、ここはその例の 1 つです。

'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

部分文字列を使用するのではなく、そのようなことを行う方がおそらくもう少し一貫性がありますが、誰が知っていますか.

于 2008-09-22T15:24:55.463 に答える
0

ページの元のドロップダウンを 2 桁の値のみにしないのはなぜですか? 年を見ると、特に CC ベンダーがすでに 2 桁しか取得していない場合、クレジット カードがカバーする範囲はごくわずかです。

于 2008-09-22T15:15:38.823 に答える
0

これは私にとってはうまくいくようです。 yourDateTime.ToString().Substring(2);

于 2018-11-09T03:08:23.883 に答える
0

これは古い投稿ですが、(C# 3.0 以降) を使用して例を挙げたいと思いました。ExtensionMethodこれにより、実装が非表示になり、代わりにプロジェクト内のどこでも使用できるようになるか、コードを何度も再作成するか、または認識する必要があるためです。いくつかのユーティリティクラスの。

拡張メソッドを使用すると、新しい派生型を作成したり、再コンパイルしたり、元の型を変更したりすることなく、既存の型にメソッドを「追加」できます。拡張メソッドは特別な種類の静的メソッドですが、拡張された型のインスタンス メソッドであるかのように呼び出されます。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();
于 2015-06-19T09:54:54.757 に答える
-1

組み込みのウ​​ェイが存在したとしても、現在よりも大きいとは検証されず、部分文字列呼び出しとの違いはほとんどありません。私はそれについて心配しません。

于 2008-09-22T15:15:58.277 に答える