GMT مخفف Greenwich Meridian Time است که یک زمان مرجع برای جهان است. این زمان در گرینویچ، انگلستان است و گاهی اوقات به عنوان "زمان زولو" نامیده می شود. (این به ویژه در زبان هوانوردی صادق است. منطقه زمانی GMT اغلب به صورت اختصاری "Z" خوانده می شود که نام آوایی آن زولو است.)
ممکن است نیاز به تبدیل یک زمان محلی به GMT در کاربرگ خود داشته باشید. اگر همیشه می دانید که زمان به وقت محلی وارد می شود، این کار را می توان به راحتی با یک فرمول انجام داد. به عنوان مثال، فرض کنید که در سلول B7 زمان محلی را وارد می کنید و در منطقه زمانی اقیانوس آرام هستید. در این منطقه زمانی، بسته به اینکه آیا ساعت تابستانی در حال اجرا است، یا هفت یا هشت ساعت از GMT عقب هستید. فرمول زیر زمان وارد شده در B7 را با هفت یا هشت ساعت تنظیم می کند، بسته به اینکه تاریخ مرتبط با ساعت در بازه زمانی تابستانی باشد یا خیر.
=IF(AND(B7>=DATEVALUE("3/8/2009 02:00"),B19
به یاد داشته باشید که هر زمان که زمانی را در یک سلول وارد می کنید، اکسل به طور خودکار تاریخ را به آن متصل می کند. بنابراین، اگر زمان 10:15 را در یک سلول وارد کنید، و روزی که وارد می کنید 17 ژانویه باشد، اکسل به طور خودکار ورودی سلول را به 01/17/2009 10:15:00 تبدیل می کند. این کار حتی با وجود اینکه ممکن است فقط زمان را در سلول نمایش دهید انجام می شود - در اکسل، هر تاریخ دارای زمانی مرتبط با آن است و هر زمان دارای تاریخ مرتبط با آن است.
به دلیل این رفتار ورودی، اکسل از فرمولی که به تازگی نشان داده شده است برای انجام تنظیمات مناسب بر اساس تاریخ پیش فرض زمانی که زمان (تاریخ امروز) یا تاریخی را وارد می کنید استفاده می کند.
تنها ایراد این رویکرد فرمولی این است که باید به یاد داشته باشید که تاریخ های مرزی ساعت تابستانی را از سالی به سال دیگر تغییر دهید. (موارد موجود در فرمول مربوط به سال 2009 هستند.) می توانید فرمول را طوری تغییر دهید که در واقع تاریخ های مرزی را در سلول هایی مانند E1 و E2 به صورت زیر ذخیره کنید:
=IF(AND(B7>=$E$1,B19
در حالی که فرمول کوتاه تر است، اما هنوز با تعیین نسبتاً ایستا زمان شروع و پایان زمان تابستان مشکل دارد - باید به یاد داشته باشید که این اطلاعات را به صورت دستی به روزرسانی کنید. علاوه بر این، اگر به منطقه زمانی متفاوتی منتقل می شوید، باید به یاد داشته باشید که مقادیری را که تاریخ و زمان تنظیم می شوند، تغییر دهید.
یک راه بسیار مفید برای رفع این اشکالات، ایجاد یک تابع تعریف شده توسط کاربر است که به رابط ویندوز دسترسی داشته باشد و تعیین کند که تنظیمات سیستم در رایانه شما چیست. سیستم شما به طور خودکار زمان تابستانی و همچنین منطقه زمانی را که در آن هستید ردیابی می کند. دسترسی به این اطلاعات از طریق یک عملکرد تعریف شده توسط کاربر به این معنی است که هرگز نیازی به نگرانی در مورد موارد موجود در کاربرگ خود نخواهید داشت. برای این کار می توانید از ماکرو زیر استفاده کنید:
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)
سلول را به عنوان تاریخ/زمان فرمت کنید و خروجی دقیقاً همان چیزی است که می خواهید.