Seite 1 von 1

Umwandlung Epoch nach DateTime

Verfasst: 20. Mai 2020 14:03
von peter-pan
Hallo Zusammen,
ich habe ein kleines Problem. Ich bekomme aus einem JSON-String einen Wert zurückgeliefert, von dem ich annehme, dass es ein Epoch-Wert ist.
Eine Umwandlung mittels Epoch-Converter bringt mir

Code: Alles auswählen

Convert epoch to human-readable date and vice versa
 [batch convert]
Supports Unix timestamps in seconds, milliseconds, microseconds and nanoseconds.
Assuming that this timestamp is in seconds:
GMT: Wednesday, 20. May 2020 10:14:12
Your time zone: Mittwoch, 20. Mai 2020 12:14:12 GMT+02:00 DST
Relative: An hour ago
Wenn ich versuche das per Regel umzuwandeln

Code: Alles auswählen

// #2 Get DateTimeType from Epoch  - https://community.openhab.org/t/datetime-conversion/54266
//Regarding to the flow chart this code converts from Epoch => #6 => to Joda => #11 => to String => #1 => to DateTimeType

     val DateTimeType MyDateTimeTypeFromEpoch = new DateTimeType(new DateTime(1589969652).toString)
     logInfo("Zeitraum testen","die Uhr hat diese Stunde geschlagen: " + MyDateTimeTypeFromEpoch)
     val String MyStringFromEpoch_VariantA = new DateTime(1589969652).toString
     logInfo("Zeitraum testen","die Uhr hat diese Stunde geschlagen: " + MyStringFromEpoch_VariantA)
......     
Kommt leider nur das

Code: Alles auswählen

2020-05-20 13:05:32.470 [INFO ] [arthome.model.script.Zeitraum testen] - die Uhr hat diese Stunde geschlagen: 1970-01-19T10:39:29.652+0100
2020-05-20 13:05:32.472 [INFO ] [arthome.model.script.Zeitraum testen] - die Uhr hat diese Stunde geschlagen: 1970-01-19T10:39:29.652+01:00
heraus :!: :?:
Der Original JSON-String sieht so aus:

Code: Alles auswählen

{
    "lat": 45.xx,
    "lon": 2.yy,
    "timezone": "Europe/Berlin",
    "timezone_offset": 7200,
    "current": {
        "dt": 1589925648,
        "sunrise": 1589945535,
        "sunset": 1590001330,
        "temp": 13.47,
        "feels_like": 11.82,
        "pressure": 1020,
        "humidity": 71,
        "dew_point": 8.32,
        "uvi": 7.47,
        "clouds": 13,
        "wind_speed": 1.8,
        "wind_deg": 51,
        "weather": [
            {
                "id": 801,
                "main": "Clouds",
                "description": "Ein paar Wolken",
                "icon": "02n"
            }
        ]
    },
    "daily": [
        {
            "dt": 1589972400,
            "sunrise": 1589945535,
            "sunset": 1590001330,
            "temp": {
                "day": 18.74,
                "min": 9.1,
                "max": 19.05,
                "night": 9.1,
                "eve": 15.51,
                "morn": 11.95
            },
            "feels_like": {
                "day": 17.04,
                "night": 7.7,
                "eve": 14.6,
                "morn": 10.87
            },
            "pressure": 1020,
            "humidity": 63,
            "dew_point": 11.73,
            "wind_speed": 3.12,
            "wind_deg": 28,
            "weather": [
                {
                    "id": 500,
                    "main": "Rain",
                    "description": "Leichter Regen",
                    "icon": "10d"
                }
            ],
            "clouds": 55,
            "rain": 0.74,
            "uvi": 7.47
        },
        {
            "dt": 1590058800,
            "sunrise": 1590031868,
            "sunset": 1590087806,
            "temp": {
                "day": 18.98,
                "min": 10.11,
                "max": 19.43,
                "night": 10.11,
                "eve": 16.26,
                "morn": 12.54
            },
            "feels_like": {
                "day": 17.3,
                "night": 8.93,
                "eve": 15.89,
                "morn": 11.37
            },
            "pressure": 1022,
            "humidity": 56,
            "dew_point": 10.21,
            "wind_speed": 2.46,
            "wind_deg": 79,
            "weather": [
                {
                    "id": 803,
                    "main": "Clouds",
                    "description": "Überwiegend bewölkt",
                    "icon": "04d"
                }
            ],
            "clouds": 54,
            "uvi": 7.57
        },
        {
            "dt": 1590145200,
            "sunrise": 1590118204,
            "sunset": 1590174280,
            "temp": {
                "day": 23.31,
                "min": 13.98,
                "max": 23.31,
                "night": 16.07,
                "eve": 18.87,
                "morn": 13.98
            },
            "feels_like": {
                "day": 22.7,
                "night": 15.79,
                "eve": 19.81,
                "morn": 13.17
            },
            "pressure": 1022,
            "humidity": 46,
            "dew_point": 11.26,
            "wind_speed": 1.34,
            "wind_deg": 242,
            "weather": [
                {
                    "id": 804,
                    "main": "Clouds",
                    "description": "Bedeckt",
                    "icon": "04d"
                }
            ],
            "clouds": 98,
            "uvi": 7.51
        },
        {
            "dt": 1590231600,
            "sunrise": 1590204541,
            "sunset": 1590260754,
            "temp": {
                "day": 11.08,
                "min": 6.18,
                "max": 20.7,
                "night": 6.18,
                "eve": 8.91,
                "morn": 17.22
            },
            "feels_like": {
                "day": 6.82,
                "night": 3.82,
                "eve": 5.69,
                "morn": 17.25
            },
            "pressure": 1025,
            "humidity": 88,
            "dew_point": 9.31,
            "wind_speed": 5.83,
            "wind_deg": 325,
            "weather": [
                {
                    "id": 501,
                    "main": "Rain",
                    "description": "Mäßiger Regen",
                    "icon": "10d"
                }
            ],
            "clouds": 91,
            "rain": 5.57,
            "uvi": 7.44
        },
        {
            "dt": 1590318000,
            "sunrise": 1590290881,
            "sunset": 1590347226,
            "temp": {
                "day": 17.03,
                "min": 7.34,
                "max": 17.04,
                "night": 7.34,
                "eve": 13.24,
                "morn": 9.01
            },
            "feels_like": {
                "day": 13.34,
                "night": 5.44,
                "eve": 12.02,
                "morn": 7.19
            },
            "pressure": 1033,
            "humidity": 44,
            "dew_point": 5.01,
            "wind_speed": 3.57,
            "wind_deg": 290,
            "weather": [
                {
                    "id": 801,
                    "main": "Clouds",
                    "description": "Ein paar Wolken",
                    "icon": "02d"
                }
            ],
            "clouds": 23,
            "uvi": 6.74
        },
        {
            "dt": 1590404400,
            "sunrise": 1590377223,
            "sunset": 1590433696,
            "temp": {
                "day": 20.19,
                "min": 10,
                "max": 20.28,
                "night": 10,
                "eve": 16.57,
                "morn": 12.37
            },
            "feels_like": {
                "day": 17.88,
                "night": 8.64,
                "eve": 15.88,
                "morn": 10.67
            },
            "pressure": 1030,
            "humidity": 45,
            "dew_point": 8.19,
            "wind_speed": 2.59,
            "wind_deg": 83,
            "weather": [
                {
                    "id": 800,
                    "main": "Clear",
                    "description": "Klarer Himmel",
                    "icon": "01d"
                }
            ],
            "clouds": 7,
            "uvi": 6.35
        },
        {
            "dt": 1590490800,
            "sunrise": 1590463567,
            "sunset": 1590520165,
            "temp": {
                "day": 25.15,
                "min": 13.01,
                "max": 25.15,
                "night": 13.01,
                "eve": 19.25,
                "morn": 13.96
            },
            "feels_like": {
                "day": 24.96,
                "night": 12.86,
                "eve": 19.4,
                "morn": 12.8
            },
            "pressure": 1028,
            "humidity": 40,
            "dew_point": 10.95,
            "wind_speed": 0.57,
            "wind_deg": 248,
            "weather": [
                {
                    "id": 801,
                    "main": "Clouds",
                    "description": "Ein paar Wolken",
                    "icon": "02d"
                }
            ],
            "clouds": 15,
            "uvi": 6.26
        },
        {
            "dt": 1590577200,
            "sunrise": 1590549913,
            "sunset": 1590606633,
            "temp": {
                "day": 24.91,
                "min": 17.44,
                "max": 24.91,
                "night": 24.91,
                "eve": 24.91,
                "morn": 17.44
            },
            "feels_like": {
                "day": 23.85,
                "night": 23.85,
                "eve": 23.85,
                "morn": 17.75
            },
            "pressure": 1025,
            "humidity": 45,
            "dew_point": 12.25,
            "wind_speed": 2.46,
            "wind_deg": 78,
            "weather": [
                {
                    "id": 801,
                    "main": "Clouds",
                    "description": "Ein paar Wolken",
                    "icon": "02d"
                }
            ],
            "clouds": 17,
            "uvi": 6.51
        }
    ]
}
Den lade ich mir per HTTP-Cache aus OpenWeatherMap (neue Api-Schnittstelle).

Hat mir jemand einen Tipp ??!!

Re: Umwandlung Epoch nach DateTime

Verfasst: 20. Mai 2020 15:47
von bastler
... das hat mich jetzt auch interessiert. es liegt wohl daran dass mit millisekunden gerechnet wird. wenn du an deine zahl drei nullen anhängst stimmt es. ich habs so (glaube / hoffe ich) hinbekommen:

Code: Alles auswählen

        val int json = 1589969652
        val long timestampEpoch = (json).longValue * 1000

        val DateTimeType MyDateTimeTypeFromEpoch = new DateTimeType(new DateTime(timestampEpoch).toString)
        logInfo("Zeitraum testen","die Uhr hat diese Stunde geschlagen: " + MyDateTimeTypeFromEpoch)
        val String MyStringFromEpoch_VariantA = new DateTime(timestampEpoch).toString
        logInfo("Zeitraum testen","die Uhr hat diese Stunde geschlagen: " + MyStringFromEpoch_VariantA)

Re: Umwandlung Epoch nach DateTime

Verfasst: 20. Mai 2020 16:18
von peter-pan
Ich hab's auch mal so probiert :

Code: Alles auswählen

     val DateTimeType MyDateTimeTypeFromEpoch = new DateTimeType(new DateTime(1589969652000).toString)
     logInfo("Zeitraum testen","die Uhr hat diese Stunde geschlagen: " + MyDateTimeTypeFromEpoch)
     val String MyStringFromEpoch_VariantA = new DateTime(1589969652000).toString
     logInfo("Zeitraum testen","die Uhr hat diese Stunde geschlagen: " + MyStringFromEpoch_VariantA)
Das gab dann die Meldung im Logger:

Code: Alles auswählen

2020-05-20 15:59:58.650 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'datum_testen.rules', using it anyway:
Invalid number format: Integer literal is out of range: 1589969652000
Invalid number format: Integer literal is out of range: 1589969652000
...deswegen hab ich da nicht weiter gemacht. Ausserdem hat VSC auch gemeckert.

Nachdem das aber bei dir geklappt hat, habe ich nun die Regel trotzdem mal laufen lassen (ohne Multiplikation, nur 3 Nullen drangehängt) und man glaubt es nicht, es funktioniert trotzdem.

Logger:

Code: Alles auswählen

2020-05-20 16:11:43.844 [INFO ] [arthome.model.script.Zeitraum testen] - die Uhr hat diese Stunde geschlagen: 2020-05-20T12:14:12.000+0200
2020-05-20 16:11:43.847 [INFO ] [arthome.model.script.Zeitraum testen] - die Uhr hat diese Stunde geschlagen: 2020-05-20T12:14:12.000+02:00
Da ich den Wert aber sowieso aus einem JSON-String extrahieren muss, werde ich deine Syntaxregel (mit Multi) verwenden um den String in einen Longwert umzuwandeln.

Danke und Gruss
Peter