Tự động chuyển đổi sang GMT (Microsoft Excel)
GMT là từ viết tắt của Greenwich Meridian Time, là giờ tham chiếu cho thế giới; đó là giờ ở Greenwich, Anh, và đôi khi được gọi là “giờ Zulu”. (Zulu là tên phiên âm của số 0, và số 0 dùng để chỉ kinh độ của Greenwich, Anh.)
Bạn có thể cần chuyển đổi giờ địa phương sang GMT trong trang tính của mình. Nếu bạn luôn biết rằng thời gian sẽ được nhập theo giờ địa phương, điều này có thể được thực hiện khá dễ dàng với một công thức. Ví dụ: giả sử rằng bạn đang nhập giờ địa phương vào ô B7 và bạn đang ở múi giờ Thái Bình Dương. Trong múi giờ này, bạn chậm hơn GMT bảy hoặc tám giờ, tùy thuộc vào thời gian tiết kiệm ánh sáng ban ngày có hiệu lực hay không. Công thức sau sẽ điều chỉnh thời gian đã nhập trong B7 bảy hoặc tám giờ, tùy thuộc vào ngày được kết hợp với thời gian có nằm trong khoảng thời gian tiết kiệm ánh sáng ban ngày hay không.
=IF(AND(B7>=DATEVALUE("3/8/2009 02:00"),B19<= DATEVALUE("11/01/2009 02:00")),B7+7/24,B7+8/24)
Hãy nhớ rằng bất cứ khi nào bạn nhập thời gian vào một ô, Excel sẽ tự động đính kèm ngày vào ô đó. Do đó, nếu bạn nhập thời gian 10:15 vào một ô và ngày bạn thực hiện mục nhập là ngày 17 tháng 1, thì Excel sẽ tự động chuyển mục nhập trong ô thành 17/01/2009 10:15:00. Điều này được thực hiện ngay cả khi bạn có thể chỉ hiển thị thời gian trong ô — trong Excel, mọi ngày đều có thời gian gắn liền với nó và mọi thời điểm đều có ngày được liên kết với nó.
Do hành vi nhập này, Excel sẽ sử dụng công thức vừa hiển thị để thực hiện điều chỉnh thích hợp dựa trên ngày mặc định khi bạn nhập thời gian (ngày hôm nay) hoặc ngày bạn có thể nhập rõ ràng.
Hạn chế duy nhất của phương pháp công thức này là bạn phải nhớ thay đổi ranh giới giờ tiết kiệm ánh sáng ban ngày từ năm này sang năm khác.
(Những cái trong công thức dành cho năm 2009.) Bạn có thể thay đổi công thức để bạn thực sự lưu trữ ngày ranh giới trong các ô, chẳng hạn như E1 và E2, như sau:
=IF(AND(B7>=$E$1,B19<=$E$2),B7+7/24,B7+8/24)
Mặc dù công thức ngắn hơn, nhưng nó vẫn gặp vấn đề với việc xác định khá tĩnh về thời điểm tiết kiệm ánh sáng ban ngày bắt đầu và kết thúc — bạn phải nhớ cập nhật thông tin đó theo cách thủ công. Ngoài ra, nếu bạn chuyển sang múi giờ khác, bạn phải nhớ sửa đổi các giá trị mà ngày và giờ được điều chỉnh.
Một cách thực sự hữu ích để khắc phục những nhược điểm này là tạo một chức năng do người dùng xác định để truy cập vào giao diện Windows và xác định cài đặt hệ thống trong máy tính của bạn. Hệ thống của bạn sẽ tự động theo dõi thời gian tiết kiệm ánh sáng ban ngày, cũng như múi giờ bạn đang ở. Truy cập thông tin này thông qua một chức năng do người dùng xác định có nghĩa là bạn sẽ không bao giờ phải lo lắng về những mục đó trong trang tính của mình. Bạn có thể sử dụng macro sau để làm điều đó:
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
Điều này có thể trông rất ấn tượng, như thường thấy khi làm việc với các cuộc gọi hệ thống, nhưng nó hoạt động rất tuyệt vời. Có ba quy trình hệ thống được tham chiếu (SystemTimeToFileTime, LocalFileTimeToFileTime và FileTimeToSystemTime). Bằng cách thiết lập các cuộc gọi và sử dụng chúng theo thứ tự, ngày và giờ được tự động điều chỉnh thành GMT. Để sử dụng hàm, trong trang tính của bạn, bạn nhập mã này để chuyển đổi thời gian trong ô B7:
=localtimetoutc(B7)
Định dạng ô dưới dạng ngày / giờ và đầu ra chính xác như những gì bạn muốn.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (2185) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: