Admin YM

Jumat, 22 Juli 2011

Bagaimana Mengkonversi 10 Digit Angka ke Nilai Tanggal?

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
Dari kode program di atas, kesimpulan yang dapat diambil adalah: Kita dapat menggunakan fungsi buatan bernama Unix2Date yang memiliki dua parameter di dalamnya. Parameter pertama adalah nilai 10 digit tadi, sedangkan parameter kedua merupakan flag apakah kita akan mengkonversi ke waktu GMT atau waktu menurut lokal kita.
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

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Host