GMT es un acrónimo de Greenwich Meridian Time, que es una hora de referencia para el mundo; es la hora de Greenwich, Inglaterra, y a veces se la denomina «hora zulú». (Esto es particularmente cierto en la jerga de la aviación. La zona horaria GMT a menudo se abrevia como «Z», cuyo nombre fonético es zulú).

Es posible que necesite convertir una hora local a GMT en su hoja de trabajo. Si siempre sabe que la hora se ingresará en la hora local, puede hacerlo fácilmente con una fórmula. Por ejemplo, suponga que está ingresando la hora local en la celda B7 y que se encuentra en la zona horaria del Pacífico. En esta zona horaria, está siete u ocho horas detrás de GMT, dependiendo de si está en vigor el horario de verano. La siguiente fórmula ajustará la hora ingresada en B7 en siete u ocho horas, dependiendo de si la fecha asociada con la hora está dentro del período del horario de verano.

=IF(AND(B7>=DATEVALUE("3/8/2009 02:00"),B19<= DATEVALUE("11/01/2009 02:00")),B7+7/24,B7+8/24)

Recuerde que cada vez que ingresa una hora en una celda, Excel le adjunta automáticamente una fecha. Por lo tanto, si ingresa una hora de 10:15 en una celda, y el día en que realiza la entrada es el 17 de enero, Excel convierte automáticamente la entrada en la celda al 17/01/2009 10:15:00. Esto se hace aunque solo esté mostrando la hora en la celda; en Excel, cada fecha tiene una hora asociada y cada hora tiene una fecha asociada.

Debido a este comportamiento de entrada, Excel usaría la fórmula que se acaba de mostrar para hacer el ajuste adecuado según la fecha predeterminada cuando ingresa una hora (fecha de hoy) o una fecha que puede ingresar explícitamente.

El único inconveniente de este enfoque basado en fórmulas es que debe recordar cambiar las fechas límite del horario de verano de un año a otro.

(Los de la fórmula son para 2009). Puede cambiar la fórmula para que realmente almacene las fechas límite en celdas, como E1 y E2, de la siguiente manera:

=IF(AND(B7>=$E$1,B19<=$E$2),B7+7/24,B7+8/24)

Si bien la fórmula es más corta, todavía tiene un problema con la determinación bastante estática de cuándo comienza y termina el horario de verano; debe recordar actualizar esa información manualmente. Además, si te mudas a una zona horaria diferente, debes recordar modificar los valores por los que se ajustan la fecha y la hora.

Una forma realmente práctica de evitar estos inconvenientes es crear una función definida por el usuario que acceda a la interfaz de Windows y determine cuáles son las configuraciones del sistema en su computadora. Su sistema realiza un seguimiento automático del horario de verano, así como de la zona horaria en la que se encuentra. El acceso a esta información a través de una función definida por el usuario significa que nunca tendrá que preocuparse por esos elementos en su hoja de trabajo. Puedes usar la siguiente macro para hacer precisamente eso:

Option Explicit

Public Declare Function SystemTimeToFileTime Lib _   "kernel32" (lpSystemTime As SYSTEMTIME, _   lpFileTime As FILETIME) As Long

Public Declare Function LocalFileTimeToFileTime Lib _   "kernel32" (lpLocalFileTime As FILETIME, _   lpFileTime As FILETIME) As Long

Public Declare Function FileTimeToSystemTime Lib _   "kernel32" (lpFileTime As FILETIME, lpSystemTime _   As SYSTEMTIME) As Long

Public Type FILETIME     dwLowDateTime As Long     dwHighDateTime As Long End Type

Public 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

Public Function LocalTimeToUTC(dteTime As Date) As Date     Dim dteLocalFileTime As FILETIME     Dim dteFileTime As FILETIME     Dim dteLocalSystemTime As SYSTEMTIME     Dim dteSystemTime As SYSTEMTIME

dteLocalSystemTime.wYear = CInt(Year(dteTime))

dteLocalSystemTime.wMonth = CInt(Month(dteTime))

dteLocalSystemTime.wDay = CInt(Day(dteTime))

dteLocalSystemTime.wHour = CInt(Hour(dteTime))

dteLocalSystemTime.wMinute = CInt(Minute(dteTime))

dteLocalSystemTime.wSecond = CInt(Second(dteTime))



Call SystemTimeToFileTime(dteLocalSystemTime, _       dteLocalFileTime)

Call LocalFileTimeToFileTime(dteLocalFileTime, _       dteFileTime)

Call FileTimeToSystemTime(dteFileTime, dteSystemTime)



LocalTimeToUTC = CDate(dteSystemTime.wMonth & "/" & _       dteSystemTime.wDay & "/" & _       dteSystemTime.wYear & " " & _       dteSystemTime.wHour & ":" & _       dteSystemTime.wMinute & ":" & _       dteSystemTime.wSecond)

End Function

Esto puede parecer imponente, como suele ser el caso cuando se trabaja con llamadas al sistema, pero funciona de maravilla. Hay tres rutinas del sistema a las que se hace referencia (SystemTimeToFileTime, LocalFileTimeToFileTime y FileTimeToSystemTime). Al configurar las llamadas y usarlas en orden, la fecha y la hora se ajustan automáticamente a GMT. Para usar la función, en su hoja de trabajo debe ingresar esto para convertir el tiempo en la celda B7:

=localtimetoutc(B7)

Formatee la celda como fecha / hora y el resultado será exactamente lo que deseaba.

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (12238) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.

Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Automatically_Converting_to_GMT [Conversión automática a GMT].