¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como dividir um valor de marca de tempo em intervalos de 30 minutos para atribuir a blocos - Guia passo a passo

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

Olá,

Dado um valor de marca de tempo, como podemos dividi-lo em intervalos de 30 minutos para atribuí-los a um "bloco de 30 minutos"?

Por exemplo, valor de marca de tempo 20200630000149, então a Data é 30.06.2020 e a Hora é 00:01:49. Este será o primeiro intervalo de 30 minutos, então o "bloco de 30 minutos" é 1.

Por exemplo, valor de marca de tempo 20200630003850, então a Data é 30.06.2020 e a Hora é 00:38:50. Este será o segundo intervalo de 30 minutos, então o "bloco de 30 minutos" é 2.

Alguma FM pode fazer isso?

Obrigado antecipadamente.

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

4 Respuestas

0
Cargando...

Por que um módulo de função se ABAP é muito mais curto?

Lembre-se de que se você converte uma variável do tipo T em I (inteiro), o SAP converte o tempo em segundos.

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

Exemplos:

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.

EDIÇÃO: tenha cuidado com o fuso horário em que o tempo é expresso, 11h na França (9 ou 10h UTC) não é o mesmo que 11h na Coreia do Sul (~2h UTC). UTC é a mesma hora para todos no Universo/Mundo, agora são 9:39 para todos no mundo. Se você deseja um "número de bloco UTC", deve converter seu tempo para UTC e primeiro deve saber em que fuso horário seu tempo é expresso. Para mais informações, consulte a resposta e o comentário de Michael P.

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

Olá fujibau

Obtenha primeiro os valores de data e hora separadamente com a palavra-chave CONVERT TIME STAMP: https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abapconvert_time-stamp.htm

Em seguida, a partir da variável de tempo.

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.
Saudações,
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 assim?

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

O seguinte código converte qualquer hora entre 00:00:00 e 23:59:59 em blocos de 30 minutos, começando com o bloco 1:

" Ao usar o operador '/' para divisão decimal em uma variável de tipo hora,
" deve-se considerar o arredondamento comercial nos valores médios 
DATA(block) = ( time + CONV t('001500') ) / 1800.

" Ao usar o operador 'DIV' para divisão inteira em uma variável de tipo hora,
" o resultado da divisão será baseado apenas na parte inteira e o resto será ignorado 
DATA(block) = time DIV 1800 + 1
  • O bloco 1 é de 00:00:00 a 00:29:59
  • O bloco 2 é de 00:30:00 a 00:59:59
  • ...
  • O bloco 48 é de 23:30:00 a 23:59:59

O seguinte relatório mostra diferentes entradas como blocos e intervalos de blocos 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.

" Dados de entrada de exemplo
DATA(input) = VALUE ty_input_t( ( timestamp = '20200630000149' timezone = 'UTC' )
                                ( timestamp = '20200630003850' timezone = 'UTC'  )
                                ( timestamp = '20200630103850' timezone  'UTC'  )
        
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?