¿Cómo convertir DateTime a / desde un formato de cadena específico (en ambos sentidos, por ejemplo, el formato dado es "aaaaMMdd")?

132

Tengo un problema para convertir una fecha y hora que está en formato de cadena, pero no puedo convertirla usando el "yyyyMMdd"formato.

Mi código es:

string tpoc = refSubClaim.BenefitsFolder.BenefitFolderIdNumber.ToString();
string[] tpocinfo = Regex.Split(tpoc,";");

for (int i = 0; i < tpocinfo.Length; i++)
{
    switch (i)
    {
        case 0:
        {
            string[] tpoc2 = Regex.Split(tpocinfo[0], ",");
            claimantAuxillaryRecord.TPOCDate2 = tpoc2[0].ToString();
            claimantAuxillaryRecord.TPOCAmount2 = Convert.ToDecimal(tpoc2[1]);
            claimantAuxillaryRecord.FundingDelayedBeyondTPOCStartDate2 = tpoc2[2].ToString();
        }
        break;
Ashutosh
fuente
¿En qué formato está la cadena de fecha y hora en este momento?
Falle1234
11
¿Y cuál es la relevancia de su fragmento de código para la pregunta?
Darin Dimitrov
2
Estoy un poco confuso; ¿Está trabajando con una representación de cadena de una fecha o un objeto DateTime? Asumiendo que es un objeto DateTime, simplemente puede llamar obj.ToString("yyyyMMdd");
Nathan Taylor el
En realidad, TPOCDate2 ya es una variable y solo quiero convertir los elementos en tpoc2 [0] para que estén en el formato aaaaMMdd. Espero que esto responda tu pregunta
Ashutosh
¿Estás atrapado en alguna parte?
Dariusz Woźniak

Respuestas:

224

si tiene una fecha en una cadena con el formato "ddMMyyyy" y desea convertirla a "aaaaMMdd", puede hacer lo siguiente:

DateTime dt = DateTime.ParseExact(dateString, "ddMMyyyy", 
                                  CultureInfo.InvariantCulture);
dt.ToString("yyyyMMdd");
Falle1234
fuente
44
Se quedó atascado con su código, este funcionó bien DateTime. TryParse (stringValue, out outputInDateTime);
DJ '
64

Fecha y hora de análisis:

Para analizar un DateTime, use uno de los siguientes métodos:

Alternativamente, puede usar el patrón try-parse :

Lea más sobre cadenas de formato de fecha y hora personalizadas .

Convertir DateTime en una cadena:

Para devolver un DateTime como una cadena en formato "aaaaMMdd", puede usar el ToStringmétodo.

  • Ejemplo de fragmento de código: string date = DateTime.ToString("yyyyMMdd");
  • Tenga en cuenta que las M en mayúsculas se refieren a meses y las m en minúsculas a minutos.

Tu caso:

En su caso, suponiendo que no desea manejar el escenario cuando la fecha es de formato diferente o error, sería más conveniente usar ParseExact:

string dateToParse = "20170506";
DateTime parsedDate = DateTime.ParseExact(dateToParse, 
                                          "yyyyMMdd",
                                          CultureInfo.InvariantCulture);
Dariusz Woźniak
fuente
77
Este es un tema antiguo, pero para aquellos que buscan, el enlace de arriba, "formato específico de cultura" ahora es un enlace muerto. Aquí hay uno que es actual e informativo Cadenas de formato de fecha y hora personalizadas
40

Puede convertir su cadena a un DateTimevalor como este:

DateTime date = DateTime.Parse(something);

Puede convertir un DateTimevalor a una cadena formateada como esta:

date.ToString("yyyyMMdd");
SLaks
fuente
11

Cadena al formato de fecha aaaa-MM-dd: Ejemplo:

TxtCalStDate.Text = Convert.ToDateTime(objItem["StartDate"]).ToString("yyyy/MM/dd");   
NSiva
fuente
10

Si desea tener FECHA como cadena con HORA también. Podemos hacer así:

    //Date and Time is taking as current system Date-Time    
    DateTime.Now.ToString("yyyyMMdd-HHmmss");
Anish
fuente
77
minutos deben ser pequeños "m"? "aaaaMMdd-HHmmss"
CeOnSql
6

Úselo DateTime.TryParseExact()si desea hacer coincidir un formato de fecha específico

   string format = "yyyyMMdd"; 
    DateTime dateTime;
    DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture,
                                             DateTimeStyles.None, out dateTime);
Mudassir Hasan
fuente
5

Podrías usar en DateTime.TryParse()lugar de DateTime.Parse().
Con TryParse()usted tiene un valor de retorno si fue exitoso y con Parse()usted tiene que manejar una excepción

Peter
fuente
5

Simplemente hazlo de esta manera.

string yourFormat = DateTime.Now.ToString("yyyyMMdd");

Feliz codificación :)

Prashant-Systematix
fuente
3

no, es una cadena con aaaa / mm / dd y la necesito en formato aaaaMMdd

Si solo necesita eliminar las barras de una cadena, ¿no las reemplaza?

Ejemplo:

myDateString = "2013/03/28";
myDateString = myDateString.Replace("/", "");

myDateString ahora debería ser "20130328".

Menos de una exageración :)

SergioMSCosta
fuente
3

Es la forma simple de convertir a formato

 DateTime.Now.ToString("yyyyMMdd");
Manoj Kumar
fuente
2

Según los nombres de propiedad, parece que está intentando convertir una cadena en una fecha por asignación:

claimantAuxillaryRecord.TPOCDate2 = tpoc2[0].ToString();

Probablemente se deba a la cultura actual de la interfaz de usuario y, por lo tanto, no puede interpretar la cadena de fecha correctamente cuando se asigna.

Peter
fuente
no, es una cadena con aaaa / mm / dd y la necesito en formato aaaaMMdd
Ashutosh
y al hacer claimantAuxillaryRecord.TPOCDate2 = tpoc2 [0] .ToString ("aaaaMMdd"); da algunos errores de compilación. La mejor coincidencia de método sobrecargado para 'string.ToString (System.IFormatProvider)' tiene algunos argumentos no válidos
Ashutosh
@ Matt - ¿en serio? ¿Editó una respuesta de más de 4 años que ni siquiera se marcó como la respuesta para agregar una pestaña? Ese es un grave caso grave de TOC que tienes allí.
Peter
1

De C # 6:

var dateTimeUtcAsString = $"{DateTime.UtcNow:o}";

El resultado será: "2019-01-15T11: 46: 33.2752667Z"

ben alfasi
fuente
0

También encontré una forma más simple mientras buscaba esta respuesta;

string date = DateTime.Now.ToString("yyyyMMdd", System.Globalization.CultureInfo.GetCultureInfo("en-US"));
Enrique Ortiz Sánchez
fuente
¿Qué tal si tengo un valor para DateTime? Al igual que DateTime newDate = DateTime.Parse(Session["date"].ToString());?
WTFZane
0

Puedes probar estos códigos

claimantAuxillaryRecord.TPOCDate2  = Convert.ToDateTime(tpoc2[0]).ToString("yyyyMMdd"); 

O

claimantAuxillaryRecord.TPOCDate2 = Convert.ToDateTime(tpoc2[0]).ToString("yyyyMMdd hh:mm:ss"); 
A. Zalonis
fuente
1
Por el amor de Dios (nuestro señor salvador Harambe), nunca use Convert.ToDateTime ... ¡Esto es tan lento (~ 100ms)! Simplemente use ParseExact o TryParse - ¡muuuucho más rápido!
Koshera el