Ajouter la valeur du champ UTCOFFSET à la valeur du champ UTCSTRDATTIM de la table SFTTXN

SOLVED

Bonjour,

j'aurais besoin, dans un programme spécifique, d'afficher la date de début de pointage des collaborateurs. Cette date est stockée dans la table SFTTXN sous la forme d'un champ de type ADATIM : UTCSTRDATTIM qui représente la date/heure de début de pointage au format GMT et d'un offset stocké dans un champ numérique UTCOFFSET de type DCB. J'aimerais additionner la valeur de l'offset à la date UTCSTRDATTIM pour afficher le résultat dans un champ et je n'ai pas trouvé de fonction permettant d'ajouter des heures à un datetime. 

Pouvez-vous m'aider ?

Merci 

Parents
  • 0
    SUGGESTED

    Essaye ceci : 

    DateAdd("h",2,UTCSTRDATTIM)

  • 0 in reply to TWAHIRWA

    Bonjour,

    la fonction dateadd fonctionne en SQL mais pas en L4G et je n'ai pas trouvé de fonction équivalente.

  • 0 in reply to TETEFORT Nathalie
    SUGGESTED

    Bonjour,

    Pour une étude plus poussée, nous vous proposons de créer une demande au Support Sage X3.

    Bonne journée.
    Nicolas

  • +1 in reply to TETEFORT Nathalie
    verified answer

    Bonjour, 

    Voici un sous-programme qui ajoute des secondes à un datetime. Vous pouvez facilement le modifier en une fonction qui ajoute des heures...

    #**
    #* Sous-programme DTSADD ajoute des secondes au datetime donné
    #*
    #* @param ZDATTIM (datetime) : datetime
    #* @param ZSADD (dec) : nbr de secondes à ajouter au datetime
    #*!
    Subprog DTSADD(ZDATTIM,ZSADD)
      Variable Datetime ZDATTIM
      Value Decimal ZSADD
      Local Decimal ZTIMEVAL
      Local Date ZDATE
      Local Integer ZTIME
      Local Char ZCHAR_DATETIME(20)
      Local Integer Y,M,D,H,N,S,P1,P2,SJ
      Local Datetime ZD
      #on convertie le datetime en decimal et on ajoute les secondes
      Y=year(ZDATTIM)
      M=month(ZDATTIM)
      D=day(ZDATTIM)
      H=val(mid$(num$(ZDATTIM),instr(1,num$(ZDATTIM),"T")+1,2))
      P1=instr(1,num$(ZDATTIM),":")
      N=val(mid$(num$(ZDATTIM),P1+1,2))
      P2=instr(P1+1,num$(ZDATTIM),":")
      S=val(mid$(num$(ZDATTIM),P2+1,2))
    
      ZDATE=gdat$(D,M,Y)
      #calcul des secondes du jour
      SJ=H*3600+N*60+S
      If SJ+ZSADD>86400
        ZDATE+=1
        ZTIME=(SJ+ZSADD)-86400
      Else
        ZTIME=SJ+ZSADD
      Endif
    
      # datetime au format string
      ZCHAR_DATETIME = format$("D:4Y[-]2M[-]2D[T]",ZDATE)
    &                  + format$("N0:2#",int(ZTIME/3600))
    &                  + ":" + format$("N0:2#",int(mod(ZTIME,3600)/60))
    &                  + ":" + format$("N0:2#",int(mod(ZTIME,60)))+"Z"
    
      # on convertir en datetime
      ZDATTIM=gdatetime$(ZCHAR_DATETIME)
    
    End


    Piotr

Reply
  • +1 in reply to TETEFORT Nathalie
    verified answer

    Bonjour, 

    Voici un sous-programme qui ajoute des secondes à un datetime. Vous pouvez facilement le modifier en une fonction qui ajoute des heures...

    #**
    #* Sous-programme DTSADD ajoute des secondes au datetime donné
    #*
    #* @param ZDATTIM (datetime) : datetime
    #* @param ZSADD (dec) : nbr de secondes à ajouter au datetime
    #*!
    Subprog DTSADD(ZDATTIM,ZSADD)
      Variable Datetime ZDATTIM
      Value Decimal ZSADD
      Local Decimal ZTIMEVAL
      Local Date ZDATE
      Local Integer ZTIME
      Local Char ZCHAR_DATETIME(20)
      Local Integer Y,M,D,H,N,S,P1,P2,SJ
      Local Datetime ZD
      #on convertie le datetime en decimal et on ajoute les secondes
      Y=year(ZDATTIM)
      M=month(ZDATTIM)
      D=day(ZDATTIM)
      H=val(mid$(num$(ZDATTIM),instr(1,num$(ZDATTIM),"T")+1,2))
      P1=instr(1,num$(ZDATTIM),":")
      N=val(mid$(num$(ZDATTIM),P1+1,2))
      P2=instr(P1+1,num$(ZDATTIM),":")
      S=val(mid$(num$(ZDATTIM),P2+1,2))
    
      ZDATE=gdat$(D,M,Y)
      #calcul des secondes du jour
      SJ=H*3600+N*60+S
      If SJ+ZSADD>86400
        ZDATE+=1
        ZTIME=(SJ+ZSADD)-86400
      Else
        ZTIME=SJ+ZSADD
      Endif
    
      # datetime au format string
      ZCHAR_DATETIME = format$("D:4Y[-]2M[-]2D[T]",ZDATE)
    &                  + format$("N0:2#",int(ZTIME/3600))
    &                  + ":" + format$("N0:2#",int(mod(ZTIME,3600)/60))
    &                  + ":" + format$("N0:2#",int(mod(ZTIME,60)))+"Z"
    
      # on convertir en datetime
      ZDATTIM=gdatetime$(ZCHAR_DATETIME)
    
    End


    Piotr

Children
No Data