Cuando ejecutamos
Convert.ToDateTime('08/01/2014') ¿cómo convertir a 1-Ago-2014 (ignorar el formato) y no 8-Ene-2014?

Tal y como yo lo vi, no hay ninguna mención de cualquier formato a la cadena de parámetro que se pasa a este método.

  • ¿Cuál es su CurrentCulture?
  • determinado por la configuración del servidor si la cultura no está definido.
  • Si no especifica una cultura de su cultura actual se utiliza.
  • posibles duplicados de Convert.ToDateTime , de cualquier manera para representar el mes y el año en los campos de C#?
  • Esto no es un duplicado. Esta pregunta preguntar por qué Convert.ToDateTime, convierte a esta cadena como 1-Aug-2014 no 8-Jan-2014.
  • He retraído de la votación, pero estas dos preguntas son demasiado cerca(al menos en su forma actual) como para mí. Tal vez debería haber creado algunos canónica de la respuesta de dicho mes-en-lugar-de-día de los problemas?
  • Soner Gonul, estaba buscando esto! CurrentCulture era algo que no he oído hablar de. Gracias 🙂
  • Podría usted por favor, comparta ¿cuál es su CurrentCulture exactamente?
  • No hay (y no debería) canónica de respuesta para este tipo de preguntas ya que se depende totalmente de las culturas y la fecha en la que los patrones que tienen como estándar.
  • Mi CurrentCulture es «en-US»!
  • Actualizado mi respuesta ahora, echar un vistazo.

InformationsquelleAutor valyrian | 2014-08-18

3 Comentarios

  1. 2

    Primero de todo, es Convert.ToDateTime("08/01/2014") no Convert.ToDateTime('08/01/2014'). Las cadenas se representa con comillas dobles, no solo citas.

    Convert.ToDateTime(string) método utiliza CurrentCulture como un IFormatProvider por defecto. He aquí cómo se implementado;

    public static DateTime ToDateTime(String value)
    {
         if (value == null)
             return new DateTime(0);
         return DateTime.Parse(value, CultureInfo.CurrentCulture);
    }

    Y DateTime.Parse(string, IFormatProvider) implementado como;

    public static DateTime Parse(String s, IFormatProvider provider)
    {
        return (DateTimeParse.Parse(s, DateTimeFormatInfo.GetInstance(provider), DateTimeStyles.None));
    }

    De documentación;

    Si el valor no es nulo, el valor de retorno es el resultado de la invocación de la
    DateTime.Analizar el método de valor de uso de la información de formato en un
    Objeto DateTimeFormatInfo que se inicializa para la cultura actual.
    El argumento de valor debe contener la representación de una fecha y hora
    en uno de los formatos que se describen en el DateTimeFormatInfo tema.

    Entonces, ¿qué es DateTimeFormatInfo tema aquí exactamente? Es el DateTimeFormatInfode información con DateTimeFormatInfo.GetAllDateTimePatterns método.

    La mayoría, probablemente, el subproceso actual de la cultura tiene un MM/dd/yyyy no dd/MM/yyyy (o el personaje con el que es su DateSeparator de su CurrentCulture porque «/», el especificador de formato personalizado tiene un significado especial como reemplazarme en la cultura actual o especificado cultura separador de fecha) como un estándar de formato de fecha y hora.

    Se puede ver todos los estándares de formatos de fecha y hora de su CurrentCulture con;

    var patterns = CultureInfo.CurrentCulture.
                               DateTimeFormat.
                               GetAllDateTimePatterns();
    foreach (var format in patterns)
    {
        Console.WriteLine(format);
    }

    Permítanme darles un ejemplo; mi subproceso actual de la cultura es el turco (tr-TR). Y ha dd.MM.yyyy como un estándar de formato de fecha y hora.

    Es por eso que cuando escribo Convert.ToDateTime("02.01.2014") en mi código, se analiza esta cadena como el 2 de enero de no el 1 de febrero de.

    @SonerGönül Mi CurrentCulture es «en-US»! – Salihdeen 3 minutos hace

    Exactamente como he dicho, su en-US ha MM/dd/yyyy pero no dd/MM/yyyy como un estándar de formato de fecha y hora. Es por eso que su 08/01/2014 cadena analiza con MM/dd/yyyy patrón no dd/MM/yyyy.

    var patterns = CultureInfo.GetCultureInfo("en-US").
                           DateTimeFormat.
                           GetAllDateTimePatterns();
    foreach (var format in patterns)
    {
        Console.WriteLine(format);
    }

    Resultado será;

    M/d/yyyy
    M/d/yy
    MM/dd/yy
    MM/dd/yyyy <-- HERE!
    yy/MM/dd
    yyyy-MM-dd
    dd-MMM-yy
    dddd, MMMM dd, yyyy
    MMMM dd, yyyy
    dddd, dd MMMM, yyyy
    dd MMMM, yyyy
    dddd, MMMM dd, yyyy h:mm tt
    dddd, MMMM dd, yyyy hh:mm tt
    dddd, MMMM dd, yyyy H:mm
    dddd, MMMM dd, yyyy HH:mm
    MMMM dd, yyyy h:mm tt
    MMMM dd, yyyy hh:mm tt
    MMMM dd, yyyy H:mm
    MMMM dd, yyyy HH:mm
    dddd, dd MMMM, yyyy h:mm tt
    dddd, dd MMMM, yyyy hh:mm tt
    dddd, dd MMMM, yyyy H:mm
    dddd, dd MMMM, yyyy HH:mm
    dd MMMM, yyyy h:mm tt
    dd MMMM, yyyy hh:mm tt
    dd MMMM, yyyy H:mm
    dd MMMM, yyyy HH:mm
    dddd, MMMM dd, yyyy h:mm:ss tt
    dddd, MMMM dd, yyyy hh:mm:ss tt
    dddd, MMMM dd, yyyy H:mm:ss
    dddd, MMMM dd, yyyy HH:mm:ss
    MMMM dd, yyyy h:mm:ss tt
    MMMM dd, yyyy hh:mm:ss tt
    MMMM dd, yyyy H:mm:ss
    MMMM dd, yyyy HH:mm:ss
    dddd, dd MMMM, yyyy h:mm:ss tt
    dddd, dd MMMM, yyyy hh:mm:ss tt
    dddd, dd MMMM, yyyy H:mm:ss
    dddd, dd MMMM, yyyy HH:mm:ss
    dd MMMM, yyyy h:mm:ss tt
    dd MMMM, yyyy hh:mm:ss tt
    dd MMMM, yyyy H:mm:ss
    dd MMMM, yyyy HH:mm:ss
    M/d/yyyy h:mm tt
    M/d/yyyy hh:mm tt
    M/d/yyyy H:mm
    M/d/yyyy HH:mm
    M/d/yy h:mm tt
    M/d/yy hh:mm tt
    M/d/yy H:mm
    M/d/yy HH:mm
    MM/dd/yy h:mm tt
    MM/dd/yy hh:mm tt
    MM/dd/yy H:mm
    MM/dd/yy HH:mm
    MM/dd/yyyy h:mm tt
    MM/dd/yyyy hh:mm tt
    MM/dd/yyyy H:mm
    MM/dd/yyyy HH:mm
    yy/MM/dd h:mm tt
    yy/MM/dd hh:mm tt
    yy/MM/dd H:mm
    yy/MM/dd HH:mm
    yyyy-MM-dd h:mm tt
    yyyy-MM-dd hh:mm tt
    yyyy-MM-dd H:mm
    yyyy-MM-dd HH:mm
    dd-MMM-yy h:mm tt
    dd-MMM-yy hh:mm tt
    dd-MMM-yy H:mm
    dd-MMM-yy HH:mm
    M/d/yyyy h:mm:ss tt
    M/d/yyyy hh:mm:ss tt
    M/d/yyyy H:mm:ss
    M/d/yyyy HH:mm:ss
    M/d/yy h:mm:ss tt
    M/d/yy hh:mm:ss tt
    M/d/yy H:mm:ss
    M/d/yy HH:mm:ss
    MM/dd/yy h:mm:ss tt
    MM/dd/yy hh:mm:ss tt
    MM/dd/yy H:mm:ss
    MM/dd/yy HH:mm:ss
    MM/dd/yyyy h:mm:ss tt
    MM/dd/yyyy hh:mm:ss tt
    MM/dd/yyyy H:mm:ss
    MM/dd/yyyy HH:mm:ss
    yy/MM/dd h:mm:ss tt
    yy/MM/dd hh:mm:ss tt
    yy/MM/dd H:mm:ss
    yy/MM/dd HH:mm:ss
    yyyy-MM-dd h:mm:ss tt
    yyyy-MM-dd hh:mm:ss tt
    yyyy-MM-dd H:mm:ss
    yyyy-MM-dd HH:mm:ss
    dd-MMM-yy h:mm:ss tt
    dd-MMM-yy hh:mm:ss tt
    dd-MMM-yy H:mm:ss
    dd-MMM-yy HH:mm:ss
    MMMM dd
    MMMM dd
    yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
    yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
    ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
    ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
    yyyy'-'MM'-'dd'T'HH':'mm':'ss
    h:mm tt
    hh:mm tt
    H:mm
    HH:mm
    h:mm:ss tt
    hh:mm:ss tt
    H:mm:ss
    HH:mm:ss
    yyyy'-'MM'-'dd HH':'mm':'ss'Z'
    dddd, MMMM dd, yyyy h:mm:ss tt
    dddd, MMMM dd, yyyy hh:mm:ss tt
    dddd, MMMM dd, yyyy H:mm:ss
    dddd, MMMM dd, yyyy HH:mm:ss
    MMMM dd, yyyy h:mm:ss tt
    MMMM dd, yyyy hh:mm:ss tt
    MMMM dd, yyyy H:mm:ss
    MMMM dd, yyyy HH:mm:ss
    dddd, dd MMMM, yyyy h:mm:ss tt
    dddd, dd MMMM, yyyy hh:mm:ss tt
    dddd, dd MMMM, yyyy H:mm:ss
    dddd, dd MMMM, yyyy HH:mm:ss
    dd MMMM, yyyy h:mm:ss tt
    dd MMMM, yyyy hh:mm:ss tt
    dd MMMM, yyyy H:mm:ss
    dd MMMM, yyyy HH:mm:ss
    MMMM, yyyy
    MMMM, yyyy
  2. 0

    Uso de este.

    DateTime.ParseExact(string datetime, string format, IFormatProvider provider)

    por ejemplo:

    DateTime.ParseExact("08-01-2014", "MM-dd-yyyy", new CultureInfo("en-US"))
    • Espera … ¿qué? en-US cultura? o.Oh, creo que te has perdido a la pregunta.
    • Este es sólo un ejemplo. No tengo idea de cuál es su CurrentCulture
    • o CultureInfo.InvariantCulture

Dejar respuesta

Please enter your comment!
Please enter your name here