GMT是格林威治子午线时间的缩写,格林尼治子午线时间是世界的参考时间。现在是英国格林威治的时间,有时也称为“祖鲁时间”。 (在航空术语中尤其如此。GMT时区通常缩写为“ Z”,其语音名称为Zu​​lu。)

您可能需要在工作表中将本地时间转换为格林尼治标准时间。如果您始终知道时间将以当地时间输入,则可以使用公式轻松完成此操作。例如,假定您在单元格B7中输入本地时间,并且您处于太平洋时区。在此时区,您要比格林尼治标准时间晚7或8个小时,具体取决于夏令时是否生效。以下公式将根据在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的时间,并且输入日期是1月17日,则Excel会自动将单元格中的条目转换为01/17/2009 10:15:00。即使您可能只在单元格中显示时间,此操作还是会完成的-在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的较旧菜单界面找到此技巧的版本:

链接:/ excel-Automatically_Converting_to_GMT [自动转换为GMT]。