Forum Discussion
Convertir cadena a fecha
Hola chicos,
Tengo una columna de cadena con esto:
20220307-06:30:06-GMT+0100
Estoy tratando de convertirlo en una columna de fecha sin éxito.
¿Cómo se podría hacer?
Hola, @mcflurry
En Power Query con zona horaria:let Date = Date.FromText(Text.BeforeDelimiter(Text.ReplaceRange([String],8,1,"T"),"T")), Time = Time.FromText(Text.BetweenDelimiters([String], "-", "-")), getTimeZone = Text.AfterDelimiter([String], "T"), getPlusOrMinusZone = Text.Start(getTimeZone, 1), GetHourOfZone = Number.FromText( Text.Middle(getTimeZone,1,2)), GetMinuteOfZone = Number.FromText(Text.End(getTimeZone,2)), DateTime = DateTime.From(Date & Time), DateTimeZone = DateTime.AddZone(DateTime,GetHourOfZone,GetMinuteOfZone), CompleteWithCheck = if getPlusOrMinusZone = "+" then DateTimeZone else DateTime.AddZone(DateTime,-GetHourOfZone,GetMinuteOfZone) in CompleteWithCheckAgregue una nueva columna como esta. "Cadena" es su columna con la fecha proporcionada. Luego, simplemente cambie el tipo de la nueva columna a "fecha" o "fechahora" o "fecha-hora".
Editar:
Mejoré el código para comprobar si es "+" o "-".Regional Settings ya está en un país europeo.
¿Podría ayudarme a solucionarlo con su código?
Supongo que es esta línea, pero no tengo el conocimiento para lograrlo ...
Date = Date.FromText(Text.BeforeDelimiter(Text.ReplaceRange([String],8,1,"T"),"T")),
Estoy transformando la columna original con formato unicode... y tal vez funcione.
Sí, arreglado de esa manera, gracias.
5 Replies
- Syndicate_Admin
Administrator
Hay @mcflurry ,
Puede crear una columna con el siguiente código y cambiar su tipo de datos a fecha/hora:
Column = var _year = MID([Column1],1,4) var _month = MID([Column1],5,2) var _day = MID([Column1],7,2) var _hh = MID([Column1],10,2) var _mm = MID([Column1],13,2) var _ss = MID([Column1],16,2) var _date = dATE(_year,_month,_day) var _time = TIME(_hh,_mm,_ss) return DATEVALUE(_date)&" "&TIMEVALUE(_time)Salida:-
Gracias
Samarth
- Syndicate_Admin
Administrator
Hola, @mcflurry
En Power Query con zona horaria:let Date = Date.FromText(Text.BeforeDelimiter(Text.ReplaceRange([String],8,1,"T"),"T")), Time = Time.FromText(Text.BetweenDelimiters([String], "-", "-")), getTimeZone = Text.AfterDelimiter([String], "T"), getPlusOrMinusZone = Text.Start(getTimeZone, 1), GetHourOfZone = Number.FromText( Text.Middle(getTimeZone,1,2)), GetMinuteOfZone = Number.FromText(Text.End(getTimeZone,2)), DateTime = DateTime.From(Date & Time), DateTimeZone = DateTime.AddZone(DateTime,GetHourOfZone,GetMinuteOfZone), CompleteWithCheck = if getPlusOrMinusZone = "+" then DateTimeZone else DateTime.AddZone(DateTime,-GetHourOfZone,GetMinuteOfZone) in CompleteWithCheckAgregue una nueva columna como esta. "Cadena" es su columna con la fecha proporcionada. Luego, simplemente cambie el tipo de la nueva columna a "fecha" o "fechahora" o "fecha-hora".
Editar:
Mejoré el código para comprobar si es "+" o "-".- Syndicate_Admin
Administrator
Hola @vojtechsima
Tengo un problema con su código.
Parece que está tomando el día como mes y el mes como día, y los datos importados de ayer fallan, lo he intentado con 02/28 como ejemplo:
- Syndicate_Admin
Administrator
Hola, @mcflurry
Vaya a Configuración - Configuración regional (archivo actual) y cámbielo a algún país europeo, en mi caso República Checa, o vuelva a escribir el script que primero escribe mes y luego día.