GMT — это аббревиатура от Greenwich Meridian Time, которое является мировым эталонным временем; это время в Гринвиче, Англия, иногда его называют «зулусским временем». (Это особенно верно в авиационном жаргоне. Часовой пояс по Гринвичу часто сокращается до «Z», чье фонетическое название — зулу.)

Возможно, вам потребуется преобразовать местное время в 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.

Этот совет (12238) применим к Microsoft Excel 2007, 2010, 2013 и 2016.

Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Automatically_Converting_to_GMT [Автоматическое преобразование в GMT].