Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 03-04-2012 09:33:42

joce77  
Membre
Lieu: Fribourg
Date d'inscription: 30-10-2008
Messages: 7
Pépites: 35
Banque: 0

Convertion dateTime en UTC

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

 

#2 03-04-2012 09:43:51

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Convertion dateTime en UTC

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 :

Code: pb

// 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

 

#3 03-04-2012 09:45:33

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Convertion dateTime en UTC

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.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#4 03-04-2012 15:04:30

joce77  
Membre
Lieu: Fribourg
Date d'inscription: 30-10-2008
Messages: 7
Pépites: 35
Banque: 0

Re: Convertion dateTime en UTC

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

 

#5 03-04-2012 15:18:48

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Convertion dateTime en UTC

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)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#6 04-04-2012 06:29:14

joce77  
Membre
Lieu: Fribourg
Date d'inscription: 30-10-2008
Messages: 7
Pépites: 35
Banque: 0

Re: Convertion dateTime en UTC

Ah ok. Je vais implémenter ces structures.

Hors ligne

 

#7 05-04-2012 07:43:52

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Convertion dateTime en UTC

Bonjour,

Effectivement, j'ai simplement donné une réponse pour mettre sur la voie :

Code: pb

 $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

 

Pied de page des forums

Propulsé par FluxBB 1.2.22