/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
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 wrote:

> Her er versjon 0.5:

Konstruktionen er en del simplere, men funktionelt er der nogle minusser:

Ugedag og årstal bliver ikke udskrevet.
Klokkeslet og dato bliver ikke korrigeret.

Jeg har også fået testet din version 4. Den fungerer heller ikke efter
hensigten:

Ugedag bliver ikke udskrevet.
Klokkeslet, dato og årstal bliver ikke korrigeret.

Derimod er Jens' seneste rettelse tæt på det perfekte:

<http://gyros.dk/usenet/asp/rss2.asp>
<http://gyros.dk/usenet/asp/datotid.inc.txt>
<http://gyros.dk/usenet/asp/feedreader.txt>

Den mangler kun korrektion af ugedag, når tidskorrektion medføre
datoændring.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



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/



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste