Mélange des jours et des mois en Lotusscript

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Mélange des jours et des mois en Lotusscript

Messagepar philippe » 03 Nov 2009 à 14:53

Bonjour,

Je rencontre un problème depuis les administrateurs ont changé de serveur.
Le serveur Windows 2003 est en anglais avec le format de date en français.
Le serveur Lotus Domino est en 7.x anglais.

Lorsque j'execute l'agent suivant :
Code : Tout sélectionner
Dim s as New NotesSession
Dim international As NotesInternational
Dim dateTime As new NotesDateTime("")

Set international = s.International

mois = "11"
annee = "2009"

If international.IsDateDMY Then
               Set dateTime = New NotesDateTime("01/" + mois+ "/" + annee)
               Print Day(dateTime.DateOnly)
End If

Day(dateTime.DateOnly) me renvoie : 11 ... et non 1 comme je l'attendais !

Quelqu'un a t'il déjà rencontré ce type de problème ?
philippe
Modérateur
Modérateur
 
Message(s) : 235
Inscrit(e) le : 11 Juin 2006 à 21:20
Localisation : Epernon

Messagepar Michael DELIQUE » 03 Nov 2009 à 15:17

salut

est-ce que ceci t'aiderais pas un peu ?

http://www.domlike.net/domlike/dl2.nsf/ ... OME-6RZPLM
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar philippe » 03 Nov 2009 à 15:23

Malheureusement non, il n'y a pas de rapports direct.
Le problème n'est en effet pas un problème d'affichage dans une vue mais une interprétation étrange du lotusscript...
Dans le cas de Julien le @day renvoyait tout de même le jour alors que dans mon cas il me renvoie le mois !
philippe
Modérateur
Modérateur
 
Message(s) : 235
Inscrit(e) le : 11 Juin 2006 à 21:20
Localisation : Epernon

Messagepar Michael DELIQUE » 03 Nov 2009 à 15:33

re

regarde si cette fonction ne t'aiderais pas
Code : Tout sélectionner
Public Function DateSystemFormat() As String
   
   'renvois le format de la date
   
   Dim international As NotesInternational
   Dim Separator As String
   
   On Error Goto ErreurHandle
   
   DateSystemFormat = ""
   If Session Is Nothing Then
      Set Session = New NotesSession
   End If
   
   Set international = Session.International
   Separator = international.DateSep
   
   If international.IsDateDMY Then
      DateSystemFormat  = "DD"+Separator+"MM"+Separator+"YYYY"
   Elseif international.IsDateMDY Then
      DateSystemFormat  = "MM"+Separator+"DD"+Separator+"YYYY"
   Elseif international.IsDateYMD Then
      DateSystemFormat  = "YYYY"+Separator+"MM"+Separator+"DD"
   Else
      Error 9999,"Error Format date !"
      Exit Function
   End If   
   
   Set international = Nothing   
   
   Exit Function
ErreurHandle:
   Msgbox "("+Cstr(Getthreadinfo (1))+" Call by "+Cstr(Getthreadinfo(10))+")"+Chr(10)+"Erreur " + Str(Err) + " : "+Chr(10) + Cstr(Error)+". "+Chr(10)+"Ligne N° "+Cstr(Erl),16," ERREUR !"
   
   DateSystemFormat = ""
   Exit Function
End Function
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar philippe » 03 Nov 2009 à 16:17

Ta fonction confirme bien qu'il attend du format DD/MM/YYYY

Pour tant lorsque j'utilise :
New NotesDateTime(DD + "/" + MM + "/" + YYYY)

Il considère DD comme le mois et MM comme le jour.

J'ai aussi essayé
s.CreateDateTime(DD + "/" + MM + "/" + YYYY)
Mais j'obtiens le même résultat
philippe
Modérateur
Modérateur
 
Message(s) : 235
Inscrit(e) le : 11 Juin 2006 à 21:20
Localisation : Epernon

Messagepar Michael DELIQUE » 03 Nov 2009 à 16:25

alors il faut que tu inverse la date et le mois

c'est le probleme qvec des dates disparate
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar philippe » 03 Nov 2009 à 16:54

alors il faut que tu inverse la date et le mois


Sauf que sur un autre serveur où la base est répliquée tout fonctionne à merveille... Je ne vais tout de même pas faire un test de formatage de date selon le nom du serveur !
philippe
Modérateur
Modérateur
 
Message(s) : 235
Inscrit(e) le : 11 Juin 2006 à 21:20
Localisation : Epernon

Messagepar Michael DELIQUE » 03 Nov 2009 à 16:56

ben...

attend un peu d'autre aurrons peut être une meilleur solution
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar Belinou » 04 Nov 2009 à 09:26

Bonjour,

je n'ai pas tout lu mais ça ressemble fortement au problème et ça peut peut-être t'aider:
http://www.notesninjas.com/A555F9/nn.ns ... erversMMDD
Sinon ya ce code, sait-on jamais:
http://www.codestore.net/store.nsf/unid/BLOG-20081015
Belinou
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 7
Inscrit(e) le : 29 Sep 2009 à 14:37

Messagepar Michael DELIQUE » 04 Nov 2009 à 09:41

salut

je jeté un oeil les codes font grosso-modo ce que fait le code que j'ai passé en paramétre

le truc serais de pouvoir déterminer le format de la date telle qu'il a été enregistré à l'origine.

sinon ya bien une solution tordu

tu enregistre aussi ta date au format YYYYMMDD dans un champ numérique.

comme ça plus de souci de format...
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar d.bugger » 04 Nov 2009 à 10:27

Petite idée :

Dim dateTime As New NotesDateTime( "" )
dateTime.LSLocalTime = Datenumber( 1997, 8, 18 )
Avatar de l’utilisateur
d.bugger
Modérateur
Modérateur
 
Message(s) : 849
Inscrit(e) le : 15 Juin 2006 à 09:19
Localisation : Drôme, France

Messagepar philippe » 04 Nov 2009 à 13:34

Avec la méthode :
annee = 2009
mois = 11
jour = 1
dateTime.LSLocalTime = Datenumber( annee, mois, jour )

Lorsque je lui demande Day(dateTime.DateOnly) il me renvoie bien : 1, Month(dateTime.DateOnly) me renvoie 11

MAIS si je lui indique
Call dateTime.AdjustDay(1)
Day(dateTime.DateOnly) il me renvoie alors : 1 et Month me renvoie 12 !?!?
Pourtant 01 Novembre 2009 + 1 jour devrait être égal au 02 Novembre 2009 et non au 01 Décembre 2009 ...
A noter aussi que la fonction AdjustMonth change le jour et non le mois.

Je vais refaire mes propres fonctions adjust.
philippe
Modérateur
Modérateur
 
Message(s) : 235
Inscrit(e) le : 11 Juin 2006 à 21:20
Localisation : Epernon

Messagepar d.bugger » 04 Nov 2009 à 13:52

Hein ? J'ai bien 1/11 et 2/11

Voici mon code:
Code : Tout sélectionner
Sub Initialize
   Dim datetime As NotesDateTime
   Set datetime= New NotesDateTime("")
   annee = 2009
   mois = 11
   jour = 1
   dateTime.LSLocalTime = Datenumber( annee, mois, jour )
   Print Day(dateTime.DateOnly) "/" Month(dateTime.DateOnly) "/" Year(dateTime.DateOnly)
   
   Call dateTime.AdjustDay(1)
   Print Day(dateTime.DateOnly) "/" Month(dateTime.DateOnly) "/" Year(dateTime.DateOnly)
End Sub   
Avatar de l’utilisateur
d.bugger
Modérateur
Modérateur
 
Message(s) : 849
Inscrit(e) le : 15 Juin 2006 à 09:19
Localisation : Drôme, France

Messagepar philippe » 04 Nov 2009 à 14:18

Comme indiqué en introduction, je n'ai aucun problème avec d'autres serveurs.
Il n'y a qu'un seul serveur qui semble se mélanger les pinceaux.
J'ai fini par réussir à règler en partie le problème en passant par LSLocalTime au lieu du DateOnly mais là encore j'ai d'autres phénomène "amusants".

Si je lui dit d'ajouter 1 mois au 01 Octobre 2009 il m'indique 30 Octobre 2009 alors que pour le 01 Novembre 2009 il renvoie bien 01 Décembre 2009.

Bref, il semble que ce serveur soit totalement perdu avec les dates ou soit basé sur un obscur calendrier lunaire AztequoSumérienOriental.
philippe
Modérateur
Modérateur
 
Message(s) : 235
Inscrit(e) le : 11 Juin 2006 à 21:20
Localisation : Epernon

Messagepar oguruma » 04 Nov 2009 à 14:22

en fait c'est assez simple

tu récupères la date du serveur sans te soucier du format (UK ou FR)
tu transformes cela en objet datetime
tel que
dim hDate as NotesDateTime
..
..
set hDate = New NotesDateTime(DateRecupDuServeur)
je présume que cela doit être
set hDate = New NotesDateTime(Now) ou
set hDate = New NotesDateTime(Today)
ou extrait d'un document serveur champ de type date... etc.

puis tu récupère le LSLocalTime pour être sur le bon fuseau horaire et tu isoles la date et l'heure comme ci-dessous

vDateValue=Datevalue(hDate.LSLocalTime)
vTimeValue=Timevalue(hDate.LSLocalTime)

puis tu extrait Année, Jour, Mois

comme ceci
ANNEE$= Cstr(Year(vDateValue))
MOIS$=f_Digits(2, Month(vDateValue))
JOUR$=f_Digits(2, Day(vDateValue))
HEURES$=f_Digits(2, Hour(vTimeValue))
MINUTES$=f_Digits(2, Minute(vTimeValue))
SECONDES$=f_Digits(2, Second(vTimeValue))

si tu as besoin d'un objet date au format FR tu peux faire dans ce cas
DateFR$=JOUR$+"/"+MOIS$+"/"+ANNEE$ + " " + HEURES$+":"+MINUTES+":"+SECONDES$

dim hDateFR as NotesDateTime

set hDdateFR=New NotesDateTime(DateFR$)

voilà en gros...

bon... pour faire propre il aurait fallu faire des beau Dim en tête du code et bien déclarer les variables puis faire de belles affectations

à toi de jouer...


aHHHH j'oubliais... la petite fonction :
Code : Tout sélectionner
Function f_Digits (Qty As Integer, Txt As Variant) As String
   Dim Buff As String
   Buff = String$(Qty, 48)
   f_Digits = Right(Buff & Val(Txt), Qty)
End Function


tu peux te faire un petite classe LS là-dessus qui est capable de gérer tous type de formats avec une propriété qui te renvoie la date au format que tu veux
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

Suivant

Retour vers Développement

cron