Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago
Solved

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:

    vojtechsima_0-1646660276179.png

    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 CompleteWithCheck

    Agregue 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's avatar
    Syndicate_Admin
    4 years ago

    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

  • 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:-

    Samarth_18_0-1646659556432.png

    Gracias

    Samarth

  • Hola, @mcflurry
    En Power Query con zona horaria:

    vojtechsima_0-1646660276179.png

    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 CompleteWithCheck

    Agregue 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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      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:

      mcflurry_0-1647348385236.png

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        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.