while sharp repetitiva que programacion para numero lenguaje historia for estructura ejemplos digitos descomponer caracteristicas algoritmo c# datetime 2-digit-year

sharp - Convirtiendo un año de 4 dígitos a 2 dígitos y viceversa en C#



que es c sharp (14)

¿Por qué no hacer que el desplegable original en la página sea solo un valor de 2 dígitos? Las tarjetas de crédito solo cubren un lapso pequeño cuando se mira el año, especialmente si el vendedor de CC solo tiene 2 dígitos.

El procesador de mi tarjeta de crédito requiere que envíe un año de dos dígitos a partir de la fecha de vencimiento de la tarjeta de crédito. Así es como estoy procesando actualmente:

  1. Puse una DropDownList del año de 4 dígitos en la página.
  2. Valido la fecha de vencimiento en un campo DateTime para asegurarme de que la fecha de vencimiento que se está pasando al procesador CC no ha expirado.
  3. Envío un año de dos dígitos al procesador CC (según se requiera). Lo hago a través de una subcadena del valor del año DDL.

¿Existe algún método para convertir un año de cuatro dígitos en un año de dos dígitos? No veo nada en el objeto DateTime . ¿O debería seguir procesándolo como soy?


Aquí hay un enlace a un artículo de 4Guys sobre cómo puede formatear fechas y horas usando el método ToString () pasando una cadena de formato personalizado.

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

En caso de que desaparezca, aquí está uno de los ejemplos.

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

Como su enlace está roto aquí hay un enlace a la clase DateTimeFormatInfo que hace que esas opciones de formateo sean posibles.

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

Probablemente sea un poco más consistente hacer algo así en lugar de usar una subcadena, pero quién sabe.


En este punto, la forma más sencilla es truncar los últimos dos dígitos del año. Para las tarjetas de crédito, tener una cita en el pasado es innecesario, por lo que Y2K no tiene ningún significado. Lo mismo se aplica si de alguna manera su código aún se está ejecutando en más de 90 años.

Yo iría más lejos y diría que en lugar de usar una lista desplegable, deje que el usuario escriba el año por sí mismo. Esta es una forma común de hacerlo y la mayoría de los usuarios pueden manejarlo.


Esta es una publicación anterior, pero pensé que daría un ejemplo usando un ExtensionMethod (desde C # 3.0), ya que esto ocultará la implementación y permitirá su uso en cualquier lugar del proyecto o recreando el código una y otra vez o necesitando ser consciente de alguna clase de utilidad.

Los métodos de extensión le permiten "agregar" métodos a tipos existentes sin crear un nuevo tipo derivado, recompilar o modificar el tipo original. Los métodos de extensión son un tipo especial de método estático, pero se llaman como si fueran métodos de instancia en el tipo extendido. Para el código de cliente escrito en C # y Visual Basic, no hay diferencia aparente entre llamar a un método de extensión y los métodos que realmente están definidos en un tipo.

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

A continuación, puede llamar a este método en cualquier lugar donde use un objeto DateTime , por ejemplo ...

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


Esto debería funcionar para usted:

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

No creo que haya ningún elemento incorporado especial en .NET.

Actualización : le falta algo de validación que quizás debería hacer. Valide la longitud de las variables ingresadas, y así sucesivamente.


He visto algunos sistemas decidir que el límite es 75; 75+ es 19xx y abajo es 20xx.


Incluso si existiera una forma integrada, no la validaría como mayor que hoy y diferiría muy poco de una llamada de subcadena. Yo no me preocuparía por eso.


La respuesta es bastante simple:

DateTime Today = DateTime.Today; string zeroBased = Today.ToString ("aa-MM-dd");


La respuesta ya está dada. Pero aquí quiero agregar algo. Alguna persona dijo que no funcionó.

Puede ser que estés usando

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

es por eso que no está funcionando. También hice el mismo error.

Cambiarlo a

DateTime.Now.ToString("yy");


Si está creando un objeto DateTime con las fechas de vencimiento (mes / año), puede usar ToString () en su variable DateTime de la siguiente manera:

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

Editar: tenga cuidado con sus fechas si usa el objeto DateTime durante la validación. Si alguien selecciona 05/2008 como fecha de caducidad de su tarjeta, expira a fines de mayo, no en la primera.


Utilice el objeto DateTime ToString con una cadena de formato personalizado como myDate.ToString ("MM / dd / aa"), por ejemplo.


Primera solución (más rápida):

yourDateTime.Year % 100

Segunda solución (más elegante en mi opinión):

yourDateTime.ToString("yy")


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

Funciona para el año actual. Cambiar DateTime.Now.Year para que funcione también por otro año.