Date: 02-16-2022
Return to Index
'Time zone offset — the difference of the time given to UTC/GMT in HourMinute
created by gbSnippets
'preceded by + if the time is ahead (east) of UTC and preceded by - if the time is behind (west) of UTC: -2359 to +2359
'How Can I Convert the Date and Time to My Time Zone?
'To convert the date and time to your time zone, do the following:
'1. Subtract any + time zone offset from the time or add any - time zone offset to the time
'2. Do pay attention to the date: if your result is greater than 23:59, add a day and subtract 24 hours from the result; if the result is less than 0, subtract a day and add 24 hours to the resulting time.
'3. Add or subtract your current time zone offset from UTC.
'4. Repeat the data calculation from step 2.
'Compilable Example: (Jose Includes)
#Compiler PBWin 10
#Compile Exe
#Dim All
%Unicode = 1
#Include "Win32API.inc"
Enum Equates Singular
IDC_Button = 500
IDC_TextBoxIn
IDC_TextBoxOut
End Enum
Global hDlg As Dword
Function PBMain() As Long
Dialog Default Font "Tahoma",12,1
Dialog New Pixels, 0, "UTC to Local Time Converter",300,300,400,130, %WS_OverlappedWindow To hDlg
Control Add Button, hDlg, %IDC_Button,"Convert", 50,10,100,25
Control Add TextBox, hDlg, %IDC_TextBoxIn,"Date: Tue, 3 Jan 2017 22:27:31 +0400 (GMT)",20,40,360,30
Control Add TextBox, hDlg, %IDC_TextBoxOut,"",20,80,360,30
Dialog Show Modal hDlg Call DlgProc
End Function
CallBack Function DlgProc() As Long
Local temp$
Select Case Cb.Msg
Case %WM_Command
Select Case Cb.Ctl
Case %IDC_Button
Control Get Text hDlg, %IDC_TextBoxIn To temp$
ConvertUTC(temp$)
End Select
End Select
End Function
Sub ConvertUTC(EmailString$)
Local MyTime As IPowerTime, LocalTimeString$, temp$
Local iHour, iMinute, iSecond, iDay, iMonth, iYear, iZoneMinutes, iPos As Long
Let MyTime = Class "PowerTime"
iPos = InStr(EmailString$,"(")
If iPos Then EmailString$ = Left$(EmailString$,iPos-1)
iDay = Val(Parse$(EmailString$,$Spc,3))
iMonth = InStr("JanFebMarAprMayJunJulAugSepOctNovDec",Parse$(EmailString$,$Spc,4))/3+1
iYear = Val(Parse$(EmailString$,$Spc,5))
temp$ = Parse$(EmailString$,$Spc,6) '22:27:31 hr:min:sec
iHour = Val(Parse$(temp$,":",1))
iMinute = Val(Parse$(temp$,":",2))
iSecond = Val(Parse$(temp$,":",3))
temp$ = Parse$(EmailString$,$Spc,7) '+0400
iZoneMinutes = Sgn(Val(temp$)) * (Val(Mid$(temp$,2,2)) * 60 + Val(Right$(temp$,2)))
MyTime.NewDate(iYear, iMonth, iDay) 'UTC time
MyTime.NewTime(iHour, iMinute, iSecond) 'UTC time
MyTime.AddMinutes(-iZoneMinutes) 'Time Zone adjustment
MyTime.ToLocalTime 'Convert UTC to Local time
LocalTimeString$ = Left$(MyTime.DayOfWeekString,3) + "," + _
Str$(MyTime.Day) + $Spc + _
Left$(MyTime.MonthString,3) + _
Str$(MyTime.Year) + $Spc + _
Left$(MyTime.TimeStringFull,8)
Control Set Text hDlg, %IDC_TextBoxOut, LocalTimeString$
End Sub
http://www.garybeene.com/sw/gbsnippets.htm