Conversión automática a GMT (Microsoft Excel)
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]
.