2011-04-08 25 views
19

Tengo una cadena que dice "12/1/2011" en inglés Cultura de los EE. UU. Mi cultura actual de la máquina es el inglés, que es el formato "dd/mm/aaaa". Cómo convertir el 01/12/2011 a 1/12/2011. He probado el siguiente formato.Cómo convertir una cadena de fecha y hora a una cadena de fecha y hora de la cultura actual

System.DateTime.Parse(result,System.Threading.Thread.CurrentThread.CurrentCulture) 
       .ToString(System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern) 

pero no pude ver ninguna salida.

-Lokesh.

Respuesta

38
DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat; 
DateTimeFormatInfo ukDtfi = new CultureInfo("en-GB", false).DateTimeFormat; 
string result = Convert.ToDateTime("12/01/2011", usDtfi).ToString(ukDtfi.ShortDatePattern); 

Esto va a hacer el truco ^^

+0

Lo sentimos, esto no está funcionando.DateTimeFormatInfo dtfi = new DateTimeFormatInfo(); dtfi.ShortDatePattern = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern; dtfi.DateSeparator = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.DateSeparator; result = Convert.ToDateTime (result, dtfi) .ToString (System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern); – Lokesh

+0

Porque cuando establece 'dtfi.ShortDatePattern = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;' obtendrá su DatePattern actual en su máquina, no el patrón de la cadena de fecha original :) –

+0

Si establece el ajustes de región e idioma como inglés [uk], el patrón de fecha corta es dd/MM/aaaa. – Lokesh

3
var culture = new CultureInfo("en-GB"); 
var dateValue = new DateTime(2011, 12, 1); 
var result = dateValue.ToString("d", culture)); 
+0

CultureInfo culture = new CultureInfo (System.Threading.Thread.CurrentThread.CurrentCulture.Name) {" La cadena no fue reconocida como válida DateTime "; System.DateTime dt = System.DateTime.Parse (resultado); resultado = dt.ToString ("d", cultura); Intenté esto pero no está funcionando. ¿Me puedes decir por qué? – Lokesh

8

Esto funciona para mí:

string myTime = DateTime.Parse("12/1/2011") 
         .ToString(CultureInfo.GetCultureInfo("en-GB").DateTimeFormat.ShortDatePattern); 
3
DateTime dateValue; 
CultureInfo culture = CultureInfo.CurrentCulture; 
DateTimeStyles styles = DateTimeStyles.None; 
DateTime.TryParse(datetimestring,culture, styles, out dateValue); 
+0

El hombre que salvó mi día, buscaba en todas partes para tratar de determinar cómo puedo configurar CUltureInfo en un nivel variable (sin alterar CurrentCulture) y no podía encontrarlo en las propiedades, métodos, etc. de Date DataType ... TryParse no estaba disponible en un típico método de extensión Date datatypes. Cuando me mostró DateTime.TryParse, me di cuenta de que está fuera de los métodos de extensión disponibles para Fecha y Fecha y hora. ¿Alguna razón por la que lo han hecho así? ¡Ya que puede declarar una fecha vacía y establecerse con dateString + CultureInfo si TryParse estaba disponible en un método de extensión para Fechar tipo! ??? –

+0

Debe usar el método TryParse en la conversión de fecha y hora para una conversión segura y fácil. –

1
public static DateTime ConvertDateTime(string Date) 
    { 
     DateTime date=new DateTime();       
     try 
     { 
      string CurrentPattern = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;     
      string[] Split = new string[] {"-","/",@"\","."}; 
      string[] Patternvalue = CurrentPattern.Split(Split,StringSplitOptions.None); 
      string[] DateSplit = Date.Split(Split,StringSplitOptions.None); 
      string NewDate = ""; 
      if (Patternvalue[0].ToLower().Contains("d") == true && Patternvalue[1].ToLower().Contains("m")==true && Patternvalue[2].ToLower().Contains("y")==true) 
      { 
       NewDate = DateSplit[1] + "/" + DateSplit[0] + "/" + DateSplit[2]; 
      } 
      else if (Patternvalue[0].ToLower().Contains("m") == true && Patternvalue[1].ToLower().Contains("d")==true && Patternvalue[2].ToLower().Contains("y")==true) 
      { 
       NewDate = DateSplit[0] + "/" + DateSplit[1] + "/" + DateSplit[2]; 
      } 
      else if (Patternvalue[0].ToLower().Contains("y") == true && Patternvalue[1].ToLower().Contains("m")==true && Patternvalue[2].ToLower().Contains("d")==true) 
      { 
       NewDate = DateSplit[2] + "/" + DateSplit[0] + "/" + DateSplit[1]; 
      } 
      else if (Patternvalue[0].ToLower().Contains("y") == true && Patternvalue[1].ToLower().Contains("d")==true && Patternvalue[2].ToLower().Contains("m")==true) 
      { 
       NewDate = DateSplit[2] + "/" + DateSplit[1] + "/" + DateSplit[0]; 
      } 
      date = DateTime.Parse(NewDate, Thread.CurrentThread.CurrentCulture); 
     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 

     } 

     return date; 

    } 
+1

por favor edite su respuesta y formatee el código para hacerlo legible – kleopatra

+0

@kleopatra también puede hacerlo – j0k

+2

También considere agregar algún tipo de descripción. –

0

Esto funciona para mí,

DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat; 
DateTimeFormatInfo ukDtfi = new CultureInfo("en-GB", false).DateTimeFormat; 
string result = Convert.ToDateTime("26/09/2015",ukDtfi).ToString(usDtfi.ShortDatePattern); 
+1

Esto no es diferente de la respuesta actualmente aceptada. – helix

+0

@helix Acabo de intercambiar los objetos de cultivo, porque la respuesta existente resulta en un error para mí, no tengo suficiente punto para editar la respuesta existente. – vipin

+0

Tal vez porque la respuesta existente se convierte de EE. UU. A Reino Unido y la suya se convierte de Reino Unido a EE. UU. – helix

Cuestiones relacionadas