2016-09-10 1 views
2

Je reçois le JSON suivant d'une demande:Comment analyser pour tDateTime un temps de date de retour d'une chaîne JSON dans Delphi XE 10

{ 
    "cdPlayer": 3, 
    "nmPlayer": "Player Name", 
    "dtCreate": "2016-08-24T22:53:31.687", 
    "dtChange": null, 
    "idStatus": true 
} 

Je voudrais charger de convertir dtCreate et dtChange à TDateTime. Comment faire correctement cela? Il n'y a pas de TJSONDateTime pour lancer le GetValue. Ci-dessous est mon code actuel où je le lance à une chaîne simple. J'utilise Delphi XE 10 Seatle. Merci

EDIT

En ce qui concerne le double va, je n'avais pas ideia que ce format de données a été ISO 8601. C'est la raison pour laquelle je ne pouvais pas trouver la réponse partout à travers Google. Peut-être que ma question aidera d'autres personnes qui, comme moi, ne le savaient pas aussi bien.

+0

Je n'avais pas ideia ce format était ISO 8601. C'est la raison pour laquelle je pourrais trouver la réponse. Mais Tks – Pascal

+0

En effet. Comprendre totalement. Bottom line avec la conversion de la date est que presque certainement toutes les questions de manger aux dates ont déjà été posées. D'une certaine manière besoin de les trouver! –

Répondre

4

Je voudrais extraire chaque partie de la date (année, mois, jour, heures, minutes, millisecondes) de cette chaîne, et coder une valeur date/heure. C'est facile parce que chaque pièce est toujours au même endroit.

function JSONDate_To_Datetime(JSONDate: string): TDatetime; 
var Year, Month, Day, Hour, Minute, Second, Millisecond: Word; 
begin 
    Year  := StrToInt(Copy(JSONDate, 1, 4)); 
    Month  := StrToInt(Copy(JSONDate, 6, 2)); 
    Day   := StrToInt(Copy(JSONDate, 9, 2)); 
    Hour  := StrToInt(Copy(JSONDate, 12, 2)); 
    Minute  := StrToInt(Copy(JSONDate, 15, 2)); 
    Second  := StrToInt(Copy(JSONDate, 18, 2)); 
    Millisecond := Round(StrToFloat(Copy(JSONDate, 19, 4))); 

    Result := EncodeDateTime(Year, Month, Day, Hour, Minute, Second, Millisecond); 
end; 
+0

Ouais .. J'ai pensé à faire ça. Je pensais juste que ce serait une fonction intégrée qui l'a fait, et a également traité le fuseau horaire. – Pascal

+0

Pour autant que je sache, il n'y a pas de format de date JSON standard, il n'est donc pas surprenant que Delphi n'ait pas de classe TJSONDateTime. –

+0

Je vois. Il est généré à partir de .Net Web API. Je vais lui donner du temps, pour voir si une autre réponse apparaît. Merci beaucoup pour votre temps. – Pascal