Saya memiliki ratusan record yang akan disalin dari suatu tabel dan database (database pertama) ke tabel yang lain pada database yang berbeda (database kedua). Sayangnya, salah satu dari kolom di tabel dalam database pertama memiliki sebuah field yang isinya merupakan data Tanggal dalam format angka 10 digit. Contoh: 1206980969. Data ini seharusnya kalau diterjemahkan menjadi format Tanggal dan Jam, akan menghasilkan 31 Maret 2008 pukul 16:29:29 menurut waktu GMT. Bagaimana caranya saya harus mengkonversi nilai data tanggal 10 digit tadi menjadi Tanggal yang sebenarnya karena di database kedua, field tersebut bertipe Date/Time? Lalu, bagaimana pula saya dapat mengetahui waktu tersebut menurut waktu lokal saya?
Oke, ini solusi yang saya lakukan dengan menggunakan Visual Basic 6.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | Option Explicit Private Declare Function GetTimeZoneInformation Lib "KERNEL32.dll" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long Private 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 Private Type TIME_ZONE_INFORMATION Bias As Long StandardName As String * 64 StandardDate As SYSTEMTIME StandardBias As Long DaylightName As String * 64 DaylightDate As SYSTEMTIME DaylightBias As Long End Type Private Const TIME_ZONE_ID_DAYLIGHT As Long = 2 Private Const Unix1970 As Long = 25569 'CDbl(DateSerial(1970, 1, 1)) Public Function Unix2Date(vUnixDate As Long, ByVal bReturnUTC As Boolean) As Date Unix2Date = DateAdd("s", vUnixDate, Unix1970) - IIf(bReturnUTC, 0, GetCurrentTZOffset) End Function Public Function GetCurrentTZOffset() As Double Dim tz As TIME_ZONE_INFORMATION Dim lRet As Long 'Cara tercepat utk memeriksa apakah kita termasuk 'Daylight Savings adalah dengan memeriksa lRet lRet = GetTimeZoneInformation(tz) 'Offset dalam menit GetCurrentTZOffset = tz.Bias + IIf(lRet = TIME_ZONE_ID_DAYLIGHT, tz.DaylightBias, tz.StandardBias) GetCurrentTZOffset = GetCurrentTZOffset / 1440 End Function Private Sub Command1_Click() MsgBox "GMT = " & Unix2Date(1206980969, True) '31 Maret 2008 16:29:29 (GMT) MsgBox "Local = " & Unix2Date(1206980969, False) '31 Maret 2008 23:29:29 (GMT + 7)End Sub |
Jika kita ingin mengkonversi data 10 digit tadi ke tanggal menurut GMT, maka parameter kedua bernilai True, sedangkan jika kita ingin mengkonversinya ke waktu lokal (dalam hal ini waktu lokal saya adalah GMT + 7), maka parameter kedua harus bernilai False.
0 Comment:
Posting Komentar