Formato de hora con gmt en Excel

Estoy realizado una plantilla para manejar una facturación electrónica, en uno de los campos debo indicar la hora actual, con formato de GMT (GREENWICH MERIDIAM TIME), pero realmente no sé como hacerlo en Excel, los requerimientos son los siguientes

Hora: elementos que deben ser informados en el formato de tiempo universal coordinado HH:MM:SSdhh:mm, de acuerdo con la norma ISO 8601-2, en el cual:
 HH: hora UTC (número de horas contadas desde la media noche, o sea, de 00 hasta 23)
 MM: minutos
 SS: segundos
 Hh:mm – diferencia en horas y minutos con relación a la hora GMT
 d: Señal (“+” o “-“) para la diferencia con relación a la hora GMT3
Ejemplo: dos y treinta de la tarde en Bogotá debe ser informado como 14:30:00-05:00

¿Alguien de buen corazón podría ayudarme?, realmente he buscado información en Internet pero no encuentro nada que me soluciones el problema, por ello como último recurso acudo a ustedes.

Respuesta
1

Creo que sé qué es lo que buscas.

Excel no tiene funciones nativas para manejar las zonas horarias. Para determinar la hora GMT hay que utilizar la API de Windows.

El código que te voy a compartir no es mio, es de uno de mis ídolos de VBA, Chip Pearson, y fue diseñado hace ya un tiempo para solventar este problema.

El Modulo completo es más grande y tiene más funcionalidades, pero para hacértelo más corto he dejado solo la función que necesitas.

Lo único que tienes que hacer es copiar y pegar el código que te voy a dar en un Modulo estándar. Luego solo tienes que introducir la fórmula en la celda como hago en el siguiente vídeo o manejar el resto como tu prefieras. En el vídeo entro a Google y busco la hora GMT actual para que veas que coincide con el resultado que arroja la función y asegurarnos que es correcto.

VIDEO DEMO

Código:

Option Explicit
Option Compare Text
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'TIPOS REQUERIDOS!!!***
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Type SYSTEMTIME
    WYear As Integer
    WMonth As Integer
    WDayOfWeek As Integer
    WDay As Integer
    WHour As Integer
    WMinute As Integer
    WSecond As Integer
    WMilliseconds As Integer
End Type
Private Type TIME_ZONE_INFORMATION
    Bias As Long
    StandardName(0 To 31) As Integer
    StandardDate As SYSTEMTIME
    StandardBias As Long
    DaylightName(0 To 31) As Integer
    DaylightDate As SYSTEMTIME
    DaylightBias As Long
End Type
Public Enum TIME_ZONE
    TIME_ZONE_ID_INVALID = 0
    TIME_ZONE_STANDARD = 1
    TIME_ZONE_DAYLIGHT = 2
End Enum
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'API de Windows REQUERIDA!!!***
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function GetTimeZoneInformation Lib "kernel32" _
    (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Private Declare Sub GetSystemTime Lib "kernel32" _
    (lpSystemTime As SYSTEMTIME)
Function ConvertLocalToGMT(Optional LocalTime As Date, _
    Optional AdjustForDST As Boolean = False) As Date
Dim T As Date
Dim TZI As TIME_ZONE_INFORMATION
Dim DST As TIME_ZONE
Dim GMT As Date
If LocalTime <= 0 Then
    T = Now
Else
    T = LocalTime
End If
DST = GetTimeZoneInformation(TZI)
If AdjustForDST = True Then
    GMT = T + TimeSerial(0, TZI.Bias, 0) + _
            IIf(DST = TIME_ZONE_DAYLIGHT, TimeSerial(0, TZI.DaylightBias, 0), 0)
Else
    GMT = T + TimeSerial(0, TZI.Bias, 0)
End If
ConvertLocalToGMT = GMT
End Function
Function DaylightTime() As TIME_ZONE
Dim TZI As TIME_ZONE_INFORMATION
Dim DST As TIME_ZONE
DST = GetTimeZoneInformation(TZI)
DaylightTime = DST
End Function

Andy

1 respuesta más de otro experto

Respuesta
1

Me extraña Lorena... este foro debiera ser tu 'primer' recurso ;)

Probá con este formato condicional. Tengo entendido que uds tienen el GMT5... si fuese GMT3 como mencionas en tu consulta cambia ese valor.

Aclaro: Formato 'personalizado'... no condicional .

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas