2009-10-14 20 views

Respuesta

12

resolver el dos formatos que desee, a continuación, utilizar:

DateTime dt = DateTime.ParseExact(input, inputFormat, 
            CultureInfo.InvariantCulture); 
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture); 

Por ejemplo:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     string input = "10/13/2009 12:00:00 AM"; 
     string inputFormat = "MM/dd/yyyy HH:mm:ss tt"; 
     string outputFormat = "yyyyMMdd"; 
     DateTime dt = DateTime.ParseExact(input, inputFormat, 
              CultureInfo.InvariantCulture); 
     string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture); 
     Console.WriteLine(output); 
    } 
} 
+0

bien, gracias para eso – raklos

2

Si la cadena es un formato de fecha y hora válida eso. Net puede entender, todo lo que necesita es:

DateTime.Parse(yourString).ToString("yyyyMMdd") 

Editado: Muchos formatos de fecha y hora razonables son comprensibles por .Net sin una especificación de formato explícito, pero si su ser específico no es así, entonces usted tendrá que utilizar un formato explícito especificador.

DateTime.ParseExact(yourString, format, 
     CultureInfo.InvariantCulture)).ToString("yyyyMMdd") 
+1

"C#" no tiene ningún formato de fecha y hora válido - .NET tiene formatos predeterminados que DateTime.Parse aceptará, pero dependen de la cultura del sistema. Es mejor ser explícito, IMO. –

+0

Editado para corregir, pero Jon, al no ser explícito, tiene la ventaja de poder manejar TODOS los formatos que .Net entiende "de fábrica", por así decirlo ... Dependiendo del escenario/requisitos, yo diría que cada uno la técnica tiene su lugar. –

0
string s = String.Format("{0:yyyyMMdd}", Convert.ToDateTime("10/13/2009 12:00:00 AM")); 
+2

Eso falla en mi caja; supones que Convert.ToDateTime manejará ese formato, lo que no sucederá en una cultura del Reino Unido. –

0

Esos son bastante buenas soluciones, pero si pasa algo en que no coincida con el patrón que va a lanzar excepciones. Me gusta usar la clase SmartDate de CSLA, http://www.lhotka.net/cslanet/download.aspx, yo mismo. Se trata de nulos y valores inválidos muy bien. La función TryStringToDate es donde sucede la magia:

private static bool TryStringToDate(string value, EmptyValue emptyValue, ref DateTime result) 
    { 
     DateTime tmp; 
     if(String.IsNullOrEmpty(value)) 
     { 
      if(emptyValue == EmptyValue.MinDate) 
      { 
       result = DateTime.MinValue; 
       return true; 
      } 
      result = DateTime.MaxValue; 
      return true; 
     } 
     if(DateTime.TryParse(value, out tmp)) 
     { 
      result = tmp; 
      return true; 
     } 
     string ldate = value.Trim().ToLower(); 
     if(ldate == "SmartDateT" || 
      ldate == "SmartDateToday" || 
      ldate == ".") 
     { 
      result = DateTime.Now; 
      return true; 
     } 
     if(ldate == "SmartDateY" || 
      ldate == "SmartDateYesterday" || 
      ldate == "-") 
     { 
      result = DateTime.Now.AddDays(-1); 
      return true; 
     } 
     if(ldate == "SmartDateTom" || 
      ldate == "SmartDateTomorrow" || 
      ldate == "+") 
     { 
      result = DateTime.Now.AddDays(1); 
      return true; 
     } 
     return false; 
    } 

Así que el objetivo final debería terminar con algo como esto:

 SmartDate dt = new SmartDate(input); 
     dt.FormatString = outputFormat; 
     string output = dt.Text; 
     Console.WriteLine(output); 
0

usted podría intentar algo como esto:

string myDate = "10/13/2009 12:00:00 AM"; 
DateTime result = new DateTime(DateTime.Now.Year, 1, 1); 
DateTime.TryParse(myDate, out result); 
string output = result.ToString("yyyyMMdd"); 
Cuestiones relacionadas