Question

Le processeur de ma carte de crédit nécessite l'envoi d'une année à deux chiffres à compter de la date d'expiration de la carte. Voici comment je traite actuellement:

  1. J'ai mis une DropDownList de l'année à 4 chiffres sur la page.
  2. Je valide la date d'expiration dans un champ DateTime pour m'assurer que la date d'expiration transmise au processeur CC n'est pas expirée.
  3. J'envoie une année à deux chiffres au processeur CC (selon les besoins). Je le fais via une sous-chaîne de la valeur de l'année DDL.

Existe-t-il une méthode permettant de convertir une année à quatre chiffres en une année à deux chiffres? Je ne vois rien sur l'objet DateTime . Ou devrais-je simplement continuer à le traiter tel que je suis?

Était-ce utile?

La solution

Si vous créez un objet DateTime en utilisant les dates d'expiration (mois / année), vous pouvez utiliser ToString () sur votre variable DateTime comme suit:

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

Éditer: faites attention à vos dates si vous utilisez l’objet DateTime lors de la validation. Si quelqu'un choisit 05/2008 comme date d'expiration de sa carte, celle-ci expire à la fin du mois de mai et non à la première.

Autres conseils

1ère solution (le plus rapide):

yourDateTime.Year % 100

2ème solution (plus élégante à mon avis):

yourDateTime.ToString("yy")

La réponse est déjà donnée. Mais ici je veux ajouter quelque chose. Une personne a dit que cela ne fonctionnait pas.

Peut-être utilisez-vous

  

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

c'est pourquoi cela ne fonctionne pas. J'ai aussi fait la même erreur.

Changez-le en

  

DateTime.Now.ToString ("yy");

Cela devrait fonctionner pour vous:

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

Je ne pense pas qu'il y ait des éléments spéciaux intégrés dans .NET.

Mettre à jour : il manque une validation que vous devriez peut-être faire. Validez la longueur des variables entrées, et ainsi de suite.

À ce stade, le moyen le plus simple consiste à tronquer les deux derniers chiffres de l’année. Pour les cartes de crédit, il est inutile d'avoir une date dans le passé, donc l'an 2000 n'a pas de sens. Il en va de même si, d'une manière ou d'une autre, votre code est toujours en cours d'exécution dans plus de 90 ans.

Je voudrais aller plus loin et dire qu'au lieu d'utiliser une liste déroulante, laissez l'utilisateur saisir lui-même l'année. C’est une façon courante de le faire et la plupart des utilisateurs peuvent le gérer.

Utilisez par exemple l'objet DateTime ToString avec une chaîne de format personnalisée, telle que myDate.ToString ("MM / jj / aa").

J'ai vu certains systèmes décider que le seuil est de 75; 75+ correspond à 19xx et en dessous à 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)

Fonctionne pour l'année en cours. Modifiez DateTime.Now.Year pour qu'il fonctionne également pendant une autre année.

Pourquoi ne pas faire en sorte que la liste déroulante originale sur la page soit une valeur à 2 chiffres seulement? Les cartes de crédit couvrent seulement une petite partie de l’année, en particulier si le fournisseur CC n’enregistre déjà que 2 chiffres.

Voici un lien vers un article de 4Guys expliquant comment formater des dates et des heures à l'aide de la méthode ToString () en transmettant une chaîne de format personnalisée.

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

Juste au cas où cela disparaît voici un des exemples.

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

Comme son lien est rompu, voici un lien vers la classe DateTimeFormatInfo qui permet ces options de formatage.

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

Il est probablement un peu plus logique de faire quelque chose comme ça plutôt que d'utiliser une chaîne, mais qui sait.

Ceci est un ancien post, mais je pensais donner un exemple en utilisant un ExtensionMethod (depuis C # 3.0), car cela masquerait l'implémentation et permettrait une utilisation partout dans le projet ou recréer le code à plusieurs reprises ou avoir besoin de connaître certaines classes d'utilitaires.

  

Les méthodes d'extension vous permettent d’ajouter " méthodes aux types existants   sans créer un nouveau type dérivé, recompiler ou autrement   modifier le type d'origine. Les méthodes d'extension sont un type particulier de   méthode statique, mais ils sont appelés comme s'ils étaient des méthodes d'instance sur   le type étendu. Pour le code client écrit en C # et Visual Basic,   il n'y a pas de différence apparente entre l'appel d'une méthode d'extension   et les méthodes réellement définies dans un type.

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

Vous pouvez ensuite appeler cette méthode partout où vous utilisez un objet DateTime , par exemple ...

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

La réponse est assez simple:

DateTime Aujourd'hui = DateTime.Aujourd'hui; string zeroBased = Today.ToString ("aa-MM-jj");

Cela semble bien fonctionner pour moi. yourDateTime.ToString (). Substring (2);

Même s'il existait un moyen, il ne le validerait pas comme plus grand qu'aujourd'hui et différerait très peu d'un appel de sous-chaîne. Je ne m'inquiéterais pas pour ça.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top