|
|
Zeit aus dem Internet holen- #23631 in section [740738] |
Sec: |
(1) Allgemeines |
Von: |
Harro Schippan |
An: |
All |
Am/Um: |
14.07.2017 15:24:55 gelesen |
Hallo, suche einen Weg aus dem Internet mir die aktuelle Zeit zu holen. Mein Problem ist, mein Programm muß auf Rechnern laufen, wo der User kein Recht hat Datum und Zeit zu ändern. Mit einer Synchronisation komme ich nicht weiter. Ich möchte in einem VFP-Programm mir Datum/Zeit aus dem Internet zu holen. Ich brauche die korrekte Zeit um einen HTTPRequest an einen entfernten Server zu senden. In diesem Request muß ich einen Zeitbereich konfigurieren. Mein Problem ist, daß die Clients oft nicht die korrekte Zeit haben und falsche Requests gesendet werden. Mit dem Programm hier unten funktioniert es. Ich bin mir aber nicht sicher, ob ich dauerhaft von der Adresse eine Antwort bekomme. Hab jetzt schon viel recherchiert, aber ich bin wohl der einzige der das Problem hat. Hoffe jemand hat einen Rat. Viele Grüße Harro *********************************************************************** CLEAR PUBLIC oHTTP *********************************************************************** cPath = "http://httpbin.org/get?show_env=1" oHTTP = createobject("WinHTTP.WinHTTPRequest.5.1") oHTTP.open("GET", cPath, .f.) oHTTP.SetRequestHeader("UserAgentString", "Visual FoxPro 9") oHTTP.SetRequestHeader("Content-Type", "text/xml") oHTTP.send() IF oHTTP.status <> 200 && HTTP OK ? "HTTP code " + transform(oHTTP.status) + " was returned" ENDIF ? oHTTP.ResponseText cResult = oHTTP.ResponseText cTime = LEFT(STREXTRACT(cResult, [Start": "], ["]),10) ltTime = DATETIME(1970, 1, 1, 0, 0, 0) + INT(VAL(cTime )) ? REPLICATE("*",80) ? "Internet UTC:", ltTime at 14 locTime = Sommerzeit2 (DATETIME()) ? "Lokal UTC:", locTime at 14 LnDiff = locTime-ltTime ? "Differenz", ALLTRIM(TRANSFORM(LnDiff))+" Sekunden" ? REPLICATE("*",80) lnGrenzwert = 30 DO CASE CASE LnDiff <= lnGrenzwert AND NOT LnDiff <= -lnGrenzwert ? "Alles gut" CASE LnDiff > lnGrenzwert ? "Lokale Uhr geht vor." ? "Mehr als "+lnGrenzwert +" Sekunden", lnDiff CASE LnDiff < -lnGrenzwert ? "Lokale Uhr geht nach." ? "Lokal mehr als "+ALLTRIM(TRANSFORM(lnGrenzwert)) +" Sekunden Differenz.", lnDiff OTHERWISE ? "Ja, watt denn nu?" ENDCASE ? REPLICATE("*",80) RELEASE oHTTP *********************************************************************** ***************************************************** * Zeitanpassung für Sommer- Winterzeit ***************************************************** FUNCTION Sommerzeit2 (OZeit) SET FDOW TO 2 wPrüfDatum = oZeit wNeuDatum = wPrüfDatum ***************************************************** * Beginn Sommerzeit wSuchjahr = YEAR(wPrüfDatum ) wDatum = DATE(wSuchjahr,3,31) wWochentag = DOW(DATE(wSuchjahr,3,31),2) wBegSommerzeit = wDatum-wWochentag ***************************************************** * Beginn Winterzeit wSuchjahr = YEAR(wPrüfDatum ) wDatum = DATE(wSuchjahr,10,31) wWochentag = DOW(DATE(wSuchjahr,10,31),2) wBegWinterzeit = wDatum-wWochentag ***************************************************** DO CASE CASE wPrüfDatum < wBegSommerzeit && "alte Winterzeit" wNeuDatum = wNeuDatum - 60*60 CASE wPrüfDatum >= wBegWinterzeit && "neue Winterzeit" wNeuDatum = wNeuDatum - 60*60 CASE BETWEEN(DATE(YEAR(wPrüfDatum),MONTH(wPrüfDatum),DAY(wPrüfDatum)),wBegSommerzeit ,wBegWinterzeit-1 ) *? "Sommerzeit" wNeuDatum = wNeuDatum - 120*60 OTHERWISE ? "oh Weh, da fehlt was" ? wPrüfDatum,wBegSommerzeit ,wBegWinterzeit-1 ? ENDCASE RETURN wNeuDatum *****************************************************
|
|
|
|