and the counterpart
Public Function FromRFC1123(extends dt as Xojo.Core.Date, input as text) as Xojo.Core.Date
'Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
'Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
'Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
' All HTTP date/time stamps MUST be represented In Greenwich Mean Time (GMT), without exception
' HTTP-date = rfc1123-date | rfc850-date | asctime-date
' rfc1123-date = wkday "," SP date1 SP time SP "GMT"
' rfc850-date = weekday "," SP date2 SP time SP "GMT"
' asctime-date = wkday SP date3 SP time SP 4DIGIT
' date1 = 2DIGIT SP month SP 4DIGIT
' ; day month year (e.g., 02 Jun 1982)
' date2 = 2DIGIT "-" month "-" 2DIGIT
' ; day-month-year (e.g., 02-Jun-82)
' date3 = month SP ( 2DIGIT | ( SP 1DIGIT ))
' ; month day (e.g., Jun 2)
' time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
' ; 00:00:00 - 23:59:59
' wkday = "Mon" | "Tue" | "Wed"
' | "Thu" | "Fri" | "Sat" | "Sun"
' weekday = "Monday" | "Tuesday" | "Wednesday"
' | "Thursday" | "Friday" | "Saturday" | "Sunday"
' month = "Jan" | "Feb" | "Mar" | "Apr"
' | "May" | "Jun" | "Jul" | "Aug"
' | "Sep" | "Oct" | "Nov" | "Dec"
Dim tmp As Text = Input.Trim
tmp = tmp.ReplaceAll(", ", " ")
Dim bits() As Text
bits = tmp.Split(" ")
Dim yearStr As Text
Dim monthName As Text
Dim dayName As Text
Dim dayStr As Text
Dim year As Integer
Dim month As Integer
Dim day As Integer
Dim timeStr As Text
Dim hrStr As Text
Dim minStr As Text
Dim secStr As Text
Dim hour As Integer
Dim minutes As Integer
Dim seconds As Integer
Dim tz As Text
For i As Integer = 0 To bits.ubound
Select Case bits(i)
Case "Sun", "Sunday", "Mon", "Monday", "Tue", "Tuesday", "Wed", "Wednesday", "Thu", "Thursday", "Fri", "Friday", "Sat", "Saturday"
dayName = bits(i)
Case "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
monthName = bits(i)
Else
If bits(i).IndexOf(":") >= 0 Then
timestr = bits(i)
Dim parts() As Text = timestr.Split(":")
hrStr = parts(0)
minStr = parts(1)
secStr = parts(2)
Elseif bits(i).IndexOf("-") >= 0 Then
// style 2 date with - between day mon year ?
Dim parts() As Text = bits(i).Split("-")
dayStr = parts(0)
monthName = parts(1)
yearStr = parts(2)
Elseif dayStr = "" Then
dayStr = bits(i)
Elseif yearStr = "" Then
yearStr = bits(i)
Else
tz = bits(i)
End If
End Select
Next
If yearStr.Length <= 2 then
If Integer.FromText(yearStr) < 50 Then
yearStr = "20" + yearStr
Else
yearStr = "19" + yearStr
End If
End If
year = Integer.FromText(yearStr)
Select Case monthName
Case "Jan"
month = 1
Case "Feb"
month = 2
Case "Mar"
month = 3
Case "Apr"
month = 4
Case "May"
month = 5
Case "Jun"
month = 6
Case "Jul"
month = 7
Case "Aug"
month = 8
Case "Sep"
month = 9
Case "Oct"
month = 10
Case "Nov"
month = 11
Case "Dec"
month = 12
End Select
day = Integer.FromText(dayStr)
hour = Integer.FromText(hrStr)
minutes = Integer.FromText(minStr)
seconds = Integer.FromText(secStr)
Dim gmtTZ As New Xojo.Core.TimeZone(0)
Dim tmpDt As New Xojo.Core.Date(year, month, day, hour, minutes, seconds, gmtTZ)
Return tmpDt
End Function
which you can use like
dim dt as Xojo.Core.Date = Xojo.Core.Date.Now
Dim dt2 As Xojo.Core.Date = dt.FromRFC1123("Sun, 06 Nov 1994 08:49:37 GMT")
Dim dt3 As Xojo.Core.Date = dt.FromRFC1123("Sunday, 06-Nov-94 08:49:37 GMT")
Dim dt4 As Xojo.Core.Date = dt.FromRFC1123("Sun Nov 6 08:49:37 1994")
modify as you see fit