martes, 21 de abril de 2015

Consumo de web services con xsd:dateTime (UTC) en SAP.

Para los web services que tienen tipo de datos xsd:dateTime, sap los transforma en el tipo sap XSDDATETIME_Z (Evento XSD (UTC): aaaa-mm-ddThh:ssZ [ext.]). Este tipo de dato guarda internamente la fecha, la hora y el huso horario.

Para poder pasar de UTC a fecha, hora y huso y viceversa podemos servirnos de guía de este código que he extraido de la clase de SAP cl_appointment. Prueba con este código.

Programa de ejemplo.

  DATAl_tst TYPE xsddatetime_z"LIKE scappt-tst_from,
        l_zone TYPE tznzone,      "LIKE scappt-zone_from,
        l_date TYPE datum,        "LIKE scappt-date_from,
        l_time TYPE sytime.       "LIKE scappt-time_from.

  CLEARl_tstl_zonel_datel_time.
*
  GET TIME STAMP FIELD l_tst.
  l_zone 'CET'."No es necesario si nos viene ya dentro del l_tst y nos lo resolvería el convert time. 
*
  WRITE'UTC->fecha, hora, huso'.
*
  CONVERT TIME STAMP l_tst
           TIME ZONE l_zone
           INTO DATE l_date
                TIME l_time.
*
  WRITE'TIME STAMP 'l_tst.
*
  WRITE'ZONE 'l_zone.
  WRITE'DATE 'l_date.
  WRITE'TIME 'l_time.
*
  WRITE/.
  WRITE'fecha, hora, huso->UTC'.
*
  CLEARl_tstl_zonel_datel_time.
*
  l_date sy-datum.
  l_time sy-uzeit.
  l_zone SY-ZONLO.
*
  CONVERT DATE l_date
  TIME l_time
  INTO TIME STAMP l_tst
  TIME ZONE l_zone.
*
  WRITE'ZONE 'l_zone.
  WRITE'DATE 'l_date.
  WRITE'TIME 'l_time.
*
  WRITE'TIME STAMP 'l_tst.
*

3 comentarios: