Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'ai un problème lorsque j'appelle un webservice java et que je lui passe une datetime par exemple format (dd.MM.yyyy HH:mm:ss) le 06.02.2012 00:00:00, le webservice me retourne la date 05.02.2012 23:00:00. Y a-t-il un moyen de contourner le problème sans devoir ajouter une heure manuellement à ma date ?
Merci de vos réponses.
Jocelyne
Hors ligne
Bonjour,
J'ai été confronté à ce problème en écrivant un client de messagerie intégré à notre application, j'ai développé un userobject permettant de réaliser un certain nombre de transformation sur les "datetime" utilisant des fonctions de l'API windows et pour ton problème :
// Conversion d'une heure locale en heure UTC FUNCTION Boolean TzSpecificLocalTimeToSystemTime(ref s_time_zone_information lpTimeZoneInformation, ref s_systemtime lpLocalTime, ref s_systemtime lpUniversalTime) LIBRARY "Kernel32.dll"
Hors ligne
Si le serveur est en UTC, ou si on connaît le décalage de sa timezone, on peut convertir une heure UTC en heure locale (et inversement) avec l'API de windows.
Il y a un exemple sur le Real's HowTo : Get the time and date from a server.
Hors ligne
Merci à Buck et Seki pour vos réponses.
Buck lorsque je déclare la fonction TzSpecificLocalTimeToSystemTime, il me fait un illegal data type sur s_time_zone_information. As-tu une idée pourquoi ?
Hors ligne
joce77 a écrit:
lorsque je déclare la fonction TzSpecificLocalTimeToSystemTime, il me fait un illegal data type sur s_time_zone_information. As-tu une idée pourquoi ?
Moi je sais : c'est une structure et il a oublié de poster sa définition (systemtime aussi, d'ailleurs)
En attendant si ça peut t'aider, elle est documentée chez Microsoft : TIME_ZONE_INFORMATION structure
Edit : pour info le type SYSTEMTIME est également une structure composée de 8 integers, et le type WCHAR en PB équivaut à CHAR (depuis PB10)
Dernière modification par seki (03-04-2012 15:26:51)
Hors ligne
Ah ok. Je vais implémenter ces structures.
Hors ligne
Bonjour,
Effectivement, j'ai simplement donné une réponse pour mettre sur la voie :
$PBExportHeader$s_time_zone_information.srs global type s_time_zone_information from structure long bias descriptor "comment" = "Décalage horaire en minutes - Windows API TIME_ZONE_INFORMATION" integer standardname[32] descriptor "comment" = "Description de la zone - Windows API TIME_ZONE_INFORMATION" s_systemtime standarddate descriptor "comment" = "Date standard - UNICODE - Windows API TIME_ZONE_INFORMATION" long standardbias descriptor "comment" = "Décalage supplémentaire - Windows API TIME_ZONE_INFORMATION" integer daylightname[32] descriptor "comment" = "Description de la zone horaire d'été - UNICODE - Windows API TIME_ZONE_INFORMATION" s_systemtime daylightdate descriptor "comment" = "Heure d'été - Windows API TIME_ZONE_INFORMATION" long daylightbias descriptor "comment" = "Décalage horaire d'été en minutes - Windows API TIME_ZONE_INFORMATION" end type $PBExportHeader$s_systemtime.srs global type s_systemtime from structure uint wyear descriptor "comment" = "Année de 1601 à 30827 - Structure SYSTEMTIME API windows" uint wmonth descriptor "comment" = "Mois de 1 à 12 - Structure SYSTEMTIME API windows" uint wdayofweek descriptor "comment" = "Jour de la semaine de 0 (Dimanche) à 6 - Structure SYSTEMTIME API windows" uint wday descriptor "comment" = "occurence du jour dans le mois (valeur admise 1 à 31) - Structure SYSTEMTIME API windows" uint whour descriptor "comment" = "Heure de 0 à 23 - Structure SYSTEMTIME API windows" uint wminute descriptor "comment" = "Minute de 0 à 59 - Structure SYSTEMTIME API windows" uint wsecond descriptor "comment" = "Seconde de 0 à 59 - Structure SYSTEMTIME API windows" uint wmilliseconds descriptor "comment" = "Milliseconde de 0 à 999 - Structure SYSTEMTIME API windows" end type
J'ai regardé mon code tu devras également implémenté les fonction de l'API GetTimeZoneInformationForYear (Vista minimum) ou GetTimeZoneInformation pour renseigner la structure s_time_zone_information avant de pouvoir appeler TzSpecificLocalTimeToSystemTime.
Hors ligne