Frage

Mein Kreditkartenprozessor erfordert ich ein zweistelliges Jahr von der Kreditkarte Ablaufdatum senden. Hier ist, wie ich zur Zeit der Verarbeitung:

  1. Ich habe eine DropDownList des 4-stelliger Jahres auf der Seite.
  2. I bestätige das Ablaufdatum in einem DateTime Feld sicher sein, dass das Ablaufdatum des CC-Prozessor geleitet wird, nicht abgelaufen.
  3. Ich sende ein zweistelliges Jahr auf den CC-Prozessor (je nach Bedarf). Ich tue dies über einen Teilkette des Wertes aus dem Jahr DDL.

Gibt es eine Methode gibt ein vierstelliges Jahr zu einem zweistelligen Jahr zu konvertieren. Ich sehe nichts auf dem DateTime Objekt. Oder soll ich einfach weiter verarbeiten, wie ich bin?

War es hilfreich?

Lösung

Wenn Sie ein Datetime-Objekt mit den Ablaufdaten (Monat / Jahr) erstellt hat, können Sie ToString () auf dem Datetime-Variable verwenden, etwa so:

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

Edit: Seien Sie mit Ihren Daten aber vorsichtig, wenn Sie das Datetime-Objekt bei der Validierung verwenden. Wenn jemand 05/2008 als ihre Karte Ablaufdatum auswählt, es am Ende Mai ausläuft, nicht auf dem ersten.

Andere Tipps

1. Lösung (am schnellsten):

yourDateTime.Year % 100

2. Lösung (elegantere meiner Meinung nach):

yourDateTime.ToString("yy")

Die Antwort ist bereits gegeben. Aber hier möchte ich etwas hinzufügen. Einige Person gesagt, dass es nicht funktioniert hat.

Kann sein, den Sie verwenden

  

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

das ist, warum es nicht funktioniert. Ich habe auch das gleiche den Fehler.

Ändern Sie ihn auf

  

DateTime.Now.ToString("yy");

Dies sollte für Sie arbeiten:

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));
}

Ich glaube nicht, gibt es keine speziellen Einbau in Sachen in .NET.

Aktualisieren : Es ist eine Bestätigung fehlt, die Sie vielleicht tun sollten. Validieren Länge der eingegebenen Variablen und so weiter.

An diesem Punkt ist die einfachste Möglichkeit, nur die letzten beiden Ziffern des Jahres gestutzt. Für Kreditkarten in der Vergangenheit ein Datum mit unnötig ist so Y2K keine Bedeutung hat. Das gleiche gilt für, wenn irgendwie Code läuft noch in 90+ Jahren.

Ich würde gehen weiter und sagen, dass stattdessen eine Dropdown-Liste zu verwenden, lassen Sie den Benutzertyp im Jahr selbst. Dies ist ein üblicher Weg, es zu tun und die meisten Nutzer damit umgehen können.

Verwenden Sie das Objekt Datetime ToString mit einem benutzerdefinierten Format-String wie myDate.ToString ( "MM / TT / JJ") zum Beispiel.

Ich habe einige Systeme entscheiden gesehen, dass die Cutoff-75; 75+ ist 19xx und 20xx unten ist.

//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)

Werke für das laufende Jahr. Ändern Sie DateTime.Now.Year es auch für ein weiteres Jahr zu arbeiten.

Warum hat nicht die ursprüngliche Dropdown auf der Seite einen 2-stelliger Wert nur? Kreditkarten nur eine kleine Spanne abdecken, wenn im Jahr sucht vor allem, wenn die CC-Anbieter nur in 2 Stellen nehmen bereits.

Hier ist ein Link zu einem 4Guys Artikel darüber, wie Sie Daten und Zeiten mit dem ToString () -Methode, indem in einem benutzerdefinierten Format-String formatiert werden können.

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

Für den Fall, es geht hier weg ist eines der Beispiele.

'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")

Seit seinem Link hier gebrochen wird, ist ein Link auf die Datetime Klasse, die diese Formatierungsoptionen ermöglicht.

http://msdn.microsoft.com/en -US / library / system.globalization.datetimeformatinfo.aspx

Es ist wahrscheinlich ein wenig mehr konsistent, so etwas zu tun, anstatt einen Teil zu verwenden, aber wer weiß.

Dies ist eine alte Post, aber ich dachte, dass ich ein Beispiel geben würde eine ExtensionMethod mit (da C # 3.0), da dies die Implementierung verstecken und im Projekt statt oder neu zu erstellen den Code immer und immer für den Einsatz überall dort gestatten oder benötigen bewusst einige Utility-Klasse sein.

  

Erweiterungsmethoden ermöglichen es Ihnen, Methoden zu bestehenden Typen „add“   ohne eine neue abgeleitete Art zu schaffen, Neukompilierung oder anderweitig   die Vorlagenart modifizieren. Erweiterungsmethoden sind eine besondere Art von   statische Methode, aber sie sind so genannt, wenn sie beispielsweise Methoden waren auf   der erweiterte Typ. Für Client-Code in C # und Visual Basic,   gibt es keinen offensichtlichen Unterschied eine Erweiterungsmethode zwischen Aufruf   und die Methoden, die tatsächlich definiert sind, in einer Art.

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

Sie können dann diese Methode aufrufen, überall verwenden Sie ein DateTime Objekt, zum Beispiel ...

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

Die Antwort ist ganz einfach:

Datetime Heute = DateTime.Today; String zeroBased = Today.ToString ( "JJ-MM-dd");

Das scheint für mich in Ordnung zu arbeiten. yourDateTime.ToString().Substring(2);

Auch wenn ein builtin Weg existierte, wäre es nicht validieren, wie größer als heute, und es wäre von einem Teil Anruf sehr wenig unterscheiden. Ich würde nicht darum kümmern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top