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:
DropDownList
de l'année à 4 chiffres sur la page.DateTime
pour m'assurer que la date d'expiration transmise au processeur CC n'est pas expirée.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?
Si vous créez un objet DateTime en utilisant les dates d'expiration (mois/année), vous pouvez utiliser ToString () sur votre variable DateTime de la manière suivante:
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 le premier.
1ère solution (le plus rapide):
yourDateTime.Year % 100
2ème solution (plus élégante à mon avis):
yourDateTime.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 intégrés spéciaux dans .NET.
Update : Il manque une validation que vous devriez peut-être faire. Validez la longueur des variables saisies, etc.
//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. Changez DateTime.Now.Year
pour que cela fonctionne aussi pour une autre année.
À ce stade, la méthode la 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 votre code est toujours actif dans plus de 90 ans.
J'irais plus loin en disant 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 l'objet DateTime ToString avec une chaîne de format personnalisée, telle que myDate.ToString ("MM/jj/aa"), par exemple.
J'ai vu certains systèmes décider que le seuil est de 75; 75+ correspond à 19xx et ci-dessous à 20xx.
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
Au cas où cela disparaît, voici l'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 rend ces options de formatage possibles.
http://msdn.Microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx
C'est probablement un peu plus logique de faire quelque chose comme ça plutôt que d'utiliser une sous-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 la mise en œuvre et permettrait une utilisation partout dans le projet ou une recréation répétée du code au courant d'une classe d'utilité.
Les méthodes d'extension vous permettent "d'ajouter" des 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 elles sont appelées comme si elles é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 qui sont 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 Today = DateTime.Today; String zeroBased = Today.ToString ("aa-MM-jj");
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 ne couvrent qu'une petite partie de l'année, surtout si le fournisseur CC n'enregistre déjà que 2 chiffres.
Cela semble bien fonctionner pour moi .yourDateTime.ToString().Substring(2);