¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo dividir un valor de marca de tiempo en intervalos de 30 minutos para asignar a bloques - Guía paso a paso

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 53 Vistas
0
Cargando...

Hola,

Dado un valor de marca de tiempo, ¿cómo podemos dividirlo en intervalos de 30 minutos para asignarlos a un "bloque de 30 minutos"?

Por ejemplo, valor de marca de tiempo 20200630000149, por lo que la Fecha es 30.06.2020 y la Hora es 00:01:49. Este será el primer intervalo de 30 minutos, por lo que el "bloque de 30 minutos" es 1.

Por ejemplo, valor de marca de tiempo 20200630003850, por lo que la Fecha es 30.06.2020 y la Hora es 00:38:50. Este será el segundo intervalo de 30 minutos, por lo que el "bloque de 30 minutos" es 2.

¿Alguna FM puede hacer esto?

Gracias de antemano.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

¿Por qué un módulo de función si ABAP es mucho más corto?

Recuerda que si conviertes una variable de tipo T en I (entero), SAP convierte el tiempo en segundos.

DATA(block) = CONV t( char_timestamp+8(6) ) DIV 1800 + 1. " 1800 segundos = 30 minutos
    

Ejemplos:

DATA: char_timestamp TYPE c LENGTH 14,
        block          TYPE i.

  char_timestamp = '2020063000149'.
  block = CONV t( char_timestamp+8(6) ) DIV 1800 + 1.
  ASSERT block = 1.

  char_timestamp = '20200630003850'.
  block = CONV t( char_timestamp+8(6) ) DIV 1800 + 1.
  ASSERT block = 2.

EDICIÓN: ten cuidado con la zona horaria en la que se expresa el tiempo, las 11am en Francia (9 o 10am UTC) no es lo mismo que las 11am en Corea del Sur (~2am UTC). UTC es la misma hora para todos en el Universo/Mundo, ahora son las 9:39am para todos en el mundo. Si deseas un "número de bloque UTC" debes convertir tu tiempo a UTC, y primero debes saber en qué zona horaria se expresa tu tiempo. Para más información, consulta la respuesta y el comentario de Michael P.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola fujibau

Obtén primero los valores de fecha y hora por separado con la palabra clave CONVERT TIME STAMP: https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abapconvert_time-stamp.htm

Luego, desde la variable de tiempo.

DATA:
  lv_hours TYPE i,
  lv_minutes TYPE i,
  lv_segment TYPE i.

lv_hours = lv_time+0(2).
lv_minutes = lv_time+2(2).

lv_hours = lv_hours + 1.

lv_segment = lv_hours * 2.
IF lv_minutes < 30.
  lv_segment = lv_segment - 1.
ENDIF.
Saludos,
Mateusz
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...
result = cond #( when char_timestamp+10(2) lt '30' then '1' else '2' ).

¿Algo así?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

El siguiente código convierte cualquier hora entre 00:00:00 y 23:59:59 en bloques de 30 minutos, comenzando con el bloque 1:

" Al utilizar el operador '/' para la división decimal en una variable de tipo hora,
" se debe tener en cuenta el redondeo comercial en los valores medios 
DATA(block) = ( time + CONV t('001500') ) / 1800.

" Al utilizar el operador 'DIV' para la división entera en una variable de tipo hora,
" el resultado de la división se basará únicamente en la parte entera y se ignorará el resto 
DATA(block) = time DIV 1800 + 1
  • El bloque 1 es de 00:00:00 a 00:29:59
  • El bloque 2 es de 00:30:00 a 00:59:59
  • ...
  • El bloque 48 es de 23:30:00 a 23:59:59

El siguiente informe muestra diferentes entradas como bloques e intervalos de bloques de 30 minutos:

REPORT ztest_time_blocks.

TYPES: BEGIN OF ty_input_s,
         timestamp TYPE timestamp,
         timezone  TYPE timezone,
         date      TYPE dats,
         time      TYPE tims,
       END OF ty_input_s,
       ty_input_t TYPE TABLE OF ty_input_s WITH EMPTY KEY,
       BEGIN OF ty_output_s.
         INCLUDE TYPE ty_input_s.
         TYPES: block      TYPE i,
         block_from TYPE tims,
         block_to   TYPE tims,
       END OF ty_output_s,
       ty_output_t TYPE TABLE OF ty_output_s WITH EMPTY KEY.

" Datos de entrada de ejemplo
DATA(input) = VALUE ty_input_t( ( timestamp = '20200630000149' timezone = 'UTC' )
                                ( timestamp = '20200630003850' timezone = 'UTC'  )
                                ( timestamp = '20200630103850' timezone 
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?