Автоматическое преобразование в GMT (Microsoft Excel)
GMT — это аббревиатура от Greenwich Meridian Time, которое является мировым эталонным временем; это время в Гринвиче, Англия, иногда его называют «зулусским временем». (Зулу — это фонетическое название нуля, а ноль обозначает долготу Гринвича, Англия.)
Возможно, вам потребуется преобразовать местное время в GMT на листе. Если вы всегда знаете, что время будет вводиться по местному времени, это можно легко сделать с помощью формулы. Например, предположим, что вы вводите местное время в ячейку B7 и находитесь в тихоокеанском часовом поясе. В этом часовом поясе вы на семь или восемь часов отстаете от GMT, в зависимости от того, действует ли летнее время. Следующая формула скорректирует время, введенное в B7, на семь или восемь часов, в зависимости от того, находится ли дата, связанная со временем, в периоде летнего времени.
=IF(AND(B7>=DATEVALUE("3/8/2009 02:00"),B19<= DATEVALUE("11/01/2009 02:00")),B7+7/24,B7+8/24)
Помните, что всякий раз, когда вы вводите время в ячейку, Excel автоматически прикрепляет к нему дату. Таким образом, если вы вводите время 10:15 в ячейку, а день, когда вы делаете запись, — 17 января, тогда Excel автоматически преобразует запись в ячейке в 10:15:00 17.01.2009. Это делается, даже если вы можете отображать только время в ячейке — в Excel с каждой датой связано время, и каждый раз с ней связана дата.
Из-за такого поведения при вводе Excel будет использовать только что показанную формулу для правильной корректировки на основе даты по умолчанию, когда вы вводите время (сегодняшняя дата) или дату, которую вы можете ввести явно.
Единственный недостаток этого шаблонного подхода состоит в том, что вы должны не забывать менять даты перехода на летнее время из года в год.
(Значения в формуле относятся к 2009 году.) Вы можете изменить формулу, чтобы фактически сохранить даты границ в ячейках, таких как E1 и E2, следующим образом:
=IF(AND(B7>=$E$1,B19<=$E$2),B7+7/24,B7+8/24)
Хотя формула короче, у нее все еще есть проблема с довольно статическим определением начала и окончания летнего времени — вы должны не забыть обновить эту информацию вручную. Кроме того, если вы переходите в другой часовой пояс, вы должны не забыть изменить значения, на которые настраиваются дата и время.
По-настоящему удобный способ обойти эти недостатки — создать пользовательскую функцию, которая обращается к интерфейсу Windows и определяет, какие системные настройки установлены на вашем компьютере. Ваша система автоматически отслеживает переход на летнее время, а также часовой пояс, в котором вы находитесь. Доступ к этой информации через пользовательскую функцию означает, что вам никогда не придется беспокоиться об этих элементах в вашем рабочем листе. Для этого можно использовать следующий макрос:
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
Это может выглядеть внушительно, как это часто бывает при работе с системными вызовами, но работает замечательно. Упоминаются три системные процедуры (SystemTimeToFileTime, LocalFileTimeToFileTime и FileTimeToSystemTime). После настройки вызовов и их использования по порядку дата и время автоматически настраиваются на GMT. Чтобы использовать эту функцию, на рабочем листе вы должны ввести это, чтобы преобразовать время в ячейку B7:
=localtimetoutc(B7)
Отформатируйте ячейку как дату / время, и результат будет именно таким, как вы хотели.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (2185) относится к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:
link: / excelribbon-Automatically_Converting_to_GMT [Автоматическое преобразование в GMT]
.