|
| Versjon 0.5: UTC til dansk/norsk datao for~ Fra : terje |
Dato : 03-03-06 18:50 |
|
Jeg starter like godt en ny tråd :-\
Det er virkelig mye mer ved UTC og konvertering til et lokalt dato
format enn man først skulle tro. Man kan forsøke å lage en generell
funksjon for å konvertere UTC til ethvert lokalt format, og man kan
skrive kode som kun konverterer til en bestemt tidssone. Det første er
selvsagt mest komplisert. Jeg forsøker på det siste, altså å lage en
funksjon som kan konvertere en hvilken som helst tidssone til lokal
dansk tid.
Jeg forutsetter fremdeles at dato formatet som sendes inn i funksjonen
er en valid RSS 2.0 dato: Mon, 27 Feb 2006 23:02:04 +0210. Jeg
forutsetter også at web serveren befinner seg i tidssone Norge/Danmark,
ellers vil DateAdd funksjonen gi uønskede resultater. Web serveren må
også ha korrekte innstillinger for sommertid.
Her er versjon 0.5:
terje
'------------------------------------------------------------------------------------------------------------
' Comment: Alle datoer som kommer inn konverteres til Norge/Danmark
(+0100) og formateres slik: 27.02 23:02
'------------------------------------------------------------------------------------------------------------
Function ConvertValidRSS20TimeStamps(sTimeStamp)
Dim arrTmp, arrTime
Dim yyyy, mm, dd, h, m, s
Dim sOffsetMode, iOffsetHours, iOffsetMinutes, tmpDate
Const utcOffset = 1
arrTmp = Split(sTimeStamp, Chr(32))
yyyy = arrTmp(3)
mm = Right("0" & CStr(ConvertMonthName(arrTmp(2))), 2)
dd = Right("0" & arrTmp(1), 2)
arrTime = Split(arrTmp(4), ":")
h = Right("0" & arrTime(0), 2)
m = Right("0" & arrTime(1), 2)
s = Right("0" & arrTime(2), 2)
'// Vi trenger denne til DateAdd funksjonen.
tmpDate = dd & "-" & arrTmp(2) & "-" & yyyy & Chr(32) & h & ":" & m
& ":" & s
sOffsetMode = Mid(arrTmp(5), 1, 1)
iOffsetHours = CInt(Mid(arrTmp(5), 2, 2))
iOffsetMinutes = CInt(Mid(arrTmp(5), 4, 2))
Select Case sOffsetMode
Case "+"
'// +0100 = +0100: Exit
If utcOffset = iOffsetHours Then
ConvertValidRSS20TimeStamps = dd & "." & mm & Chr(32) &
h & ":" & m
Exit Function
End If
tmpDate = DateAdd("h", (iOffsetHours - utcOffset), tmpDate)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
iOffsetMinutes, tmpDate)
Case "-"
tmpDate = DateAdd("h", -(iOffsetHours + utcOffset), tmpDate)
If iOffsetMinutes > 0 Then tmpDate = DateAdd("n",
-iOffsetMinutes, tmpDate)
Case Else
End Select
arrTmp = Split(tmpDate, Chr(32))
arrDate = Split(arrTmp(0), ".")
arrTime = Split(arrTmp(1), ":")
ConvertValidRSS20TimeStamps = arrDate(0) & "." & arrDate(1) &
Chr(32) & arrTime(0) & ":" & arrTime(1)
End Function
| |
Erik Ginnerskov (03-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 03-03-06 21:42 |
| | |
terje (05-03-2006)
| Kommentar Fra : terje |
Dato : 05-03-06 16:33 |
|
For dokumentasjonens skyld så poster jeg den siste versjonen av denne
koden. Jeg har forsøkt å skrive om funksjonen slik at den nå kan
akseptere alle tidssoner.
terje
Response.Write RFC822ToLocalTime("Mon, 27 Feb 2006 04:02:04 +0200", "+0100")
Function RFC822ToLocalTime(sRFC822, sServerOffset)
Dim arrTmp, arrTime, tmpDate
Dim yyyy, mm, dd, h, m, s
Dim iLocalHours, iLocalMinutes, iServerHours, iServerMinutes
'// Les inn dato verdiene
arrTmp = Split(sRFC822, Chr(32))
yyyy = arrTmp(3)
mm = Right("0" & CStr(ConvertMonthName(arrTmp(2))), 2)
dd = Right("0" & arrTmp(1), 2)
'// Les inn tids verdiene
arrTime = Split(arrTmp(4), ":")
h = Right("0" & arrTime(0), 2)
m = Right("0" & arrTime(1), 2)
s = Right("0" & arrTime(2), 2)
'// Vi trenger denne for vbscript's DateAdd funksjon
tmpDate = dd & "-" & arrTmp(2) & "-" & yyyy & Chr(32) & h & ":" & m
& ":" & s
'// Les inn tidssone informasjonen
iLocalHours = CInt(Mid(arrTmp(5), 1, 3))
iLocalMinutes = CInt(Mid(arrTmp(5), 4, 2))
iServerHours = CInt(Mid(sServerOffset, 1, 3))
iServerMinutes = CInt(Mid(sServerOffset, 4, 2))
'// Lokal tidssone er foran web server
If CInt(arrTmp(5)) > CInt(sServerOffset) Then tmpDate =
DateAdd("h", -(iLocalHours - iServerHours), tmpDate)
If iLocalMinutes > iServerMinutes Then tmpDate = DateAdd("n",
-(iLocalMinutes - iServerMinutes), tmpDate)
'// Web servers tidssone er foran lokal tid
If CInt(arrTmp(5)) < CInt(sServerOffset) Then tmpDate =
DateAdd("h", iServerHours - iLocalHours, tmpDate)
If iLocalMinutes < iServerMinutes Then tmpDate = DateAdd("n",
iServerMinutes - iLocalMinutes, tmpDate)
RFC822ToLocalTime = tmpDate
End Function
| |
Erik Ginnerskov (07-03-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 07-03-06 22:57 |
|
terje wrote:
> For dokumentasjonens skyld så poster jeg den siste versjonen av denne
> koden. Jeg har forsøkt å skrive om funksjonen slik at den nå kan
> akseptere alle tidssoner.
Desværre, det fungerer ikke jeg får en fejlmelding:
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03F4)
'If' var ventet
datotid.inc, line 42, column 4
End Function
> End Function ' Linje 42 her
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/
| |
|
|