Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: robertpp am 12.08.03 - 11:25:24

Titel: Datumsproblem
Beitrag von: robertpp am 12.08.03 - 11:25:24
Ich hab vor kurzen von eknori ein Srcipt für ein logging bekommen nur gibt es da ein problem!

Es wir mit:

                 Dim item3 As New NotesItem(newdoc, LogDateField, Format(Date$, "dd/mm/yyyy"))
das feld gefüllt aber ich bekomme immer als ergebnis das:   "31.12.9999"

Was ist da falsch???
Ich glaube aber das es mit einem Englischen Notes funktioniert.
Da gibt er "12/08/2003"  aus.

Ich hab schon probiert ob das Feld "LogDateField" ein Datumsfeld sein muss das ist glaube ich aber egal.

Was macht der befehl "Format(Date$, "dd/mm/yyyy")" überhaupt?

Es wird auch vorher das verwendet:

Set temp = doc.GetFirstItem(LogDateField)
      If temp.text = Format(Date$,"dd/mm/yyyy") Then
         LogExists = -1
      Else
         Set doc = View.GetPrevDocument(doc)
      End If          

danke robert
Titel: Re:Datumsproblem
Beitrag von: Glombi am 12.08.03 - 11:42:27
Hi,
was steht denn in Date$ drin?

Eine Beschreibung zu Format findest Du in der Designer Hilfe. Dort steht eigentlich alles drin, was man zum Notes-Leben so braucht  ;)

Andreas
Titel: Re:Datumsproblem
Beitrag von: ata am 12.08.03 - 11:42:51
... in der deutschen Version kann er mit dieser Eingabe vermutlich nichts anfangen - nimm das Datum mal mit Punkten als Trennzeichen...

... um ganz sicher zu gehen, schau die mal die Klasse

     NotesInternational

... an. Dort kannst du die Einstellungen zum aktuellen Datumsformat und den Datumstrenner erfahren. Damit würde ich das Datum dann formatieren...

ata
Titel: Re:Datumsproblem
Beitrag von: ata am 12.08.03 - 11:46:44
... aus der aktuellen Bearbeitung des DateHandling - demnächst aktualisiert auf meiner Homepage...

Code
Function FormatDatum( sDatum As String ) As String
' # ata - Formatiert das Datum gemäß den Ländereinstellungen
' # sDatum beinhaltet einen Datumsstring - z.B. "28.3.03"
' # => Rückgabe als String
' # ... Format a Date to international convention
   Dim session As New NotesSession
   Dim international As NotesInternational
   Dim Jahr As Integer
   Dim Monat As Integer
   Dim Tag As Integer
   Dim sMonat As String
   Dim sTag As String
   '
   Jahr = Year(Datevalue(sDatum))
   Monat = Month(Datevalue(sDatum))
   Tag = Day(Datevalue(sDatum))
   sMonat = Cstr(Monat)
   sTag = Cstr(Tag)
   ' # Korrektur des Formates mit führender Null, falls erforderlich
   If Monat < 10 Then sMonat = "0" + Cstr(Monat)
   If Tag < 10 Then sTag = "0" + Cstr(Tag)
   '   
   Set international = session.International
   If international.IsDateDMY Then
      FormatDatum = sTag + international.DateSep + sMonat + international.DateSep + Ltrim$(Cstr(Jahr)) 
   Elseif international.IsDateMDY Then
      FormatDatum = sMonat + international.DateSep + sTag + international.DateSep + Ltrim$(Cstr(Jahr)) 
   Elseif international.IsDateYMD Then
      FormatDatum = Ltrim$(Cstr(Jahr))  + international.DateSep + sMonat + international.DateSep + sTag      
   End If
End Function

ata
Titel: Re:Datumsproblem
Beitrag von: Glombi am 12.08.03 - 11:49:18
Hi ata,
lt. Hilfe macht "/" das:
Date separator. Separates day, month, and year in formatted date values. The actual date separator used in the returned formatted value is the date separator specified in the operating system's international settings.

Ich trau dem ganzen aber auch nicht so recht. Besser wäre, das ganze anders so programmieren, denn Vergleich zweier Datumswerte über deren String-Repräsentation halte ich nicht für so gut. Da gibt es zu viele Unwägbarkeiten.

Es geht ja wohl nur darum zu prüfen, ob für das Datum bereits ein Log-Eintrag da ist.
Da kann man dann auch mit TimeDifference hinkriegen und das ganze bspw. als GMT Zeit vergleichen. Dann klappt's auch mit verschiedenen Zeitzonen.

Andreas
Titel: Re:Datumsproblem
Beitrag von: ata am 12.08.03 - 11:51:56
... ich hatte bisher unterschiedliche Erfahrungen mit Datumsformaten - mit dieser kleinen Funktion klappts bisher ohne Probleme - den von dir vorgeschlagenen Weg müsste ich mir dazu mal anschauen - sollte auch gehen...

ata
Titel: Re:Datumsproblem
Beitrag von: robertpp am 12.08.03 - 11:59:10
Ich glaub ich check es nicht!!
So sieht das jetzt aus:

Sub Initialize

   Const TitleField = "Subject"
   Const LogViewName = "Log"
   Const LogDateField = "LogDate"
   Const LogDetailsField = "AccessLog"
   Const LogFormName = "Log"
   Dim s As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim udoc As NotesDocument
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   Dim newdoc As NotesDocument
   Dim view As NotesView
   Dim LogExists As Integer
   On Error Resume Next
   Set uidoc = ws.CurrentDocument
   Set udoc = uidoc.Document
   user = Evaluate("@Name([Abbreviate]; @UserName)")
   dateread = Evaluate("@Now")
   readstring = user(0)
   readstringdate = dateread(0)
   displayall = readstring & Chr(9) & Chr(9) & " : " & readstringdate & Chr(9) &" : " & udoc.GetFirstItem(TitleField).text & Chr$(13)
   Set view = s.CurrentDatabase.GetView("ViewLog")
   Set doc = view.GetLastDocument
   Do While Not doc Is Nothing And Not LogExists
      Set temp = doc.GetFirstItem(LogDateField)
      If temp.text = Format(Date$,"dd.mm.yyyy") Then
         LogExists = -1
      Else
         Set doc = View.GetPrevDocument(doc)
      End If          
   Loop
   If Not doc Is Nothing Then
      Set item = doc.GetFirstItem(LogDetailsField)
      Call item.AppendToTextList(displayall)
      Call doc.Save(False,False)
   Else
      Set newdoc = s.currentdatabase.Createdocument
      newdoc.form = LogFormName
      Dim PublicAccess As New NotesItem(newdoc, "$PublicAccess","1")
      Dim item2 As New NotesItem(newdoc, LogDetailsField, displayall)
      Dim item3 As New NotesItem(newdoc, LogDateField, Format(Date$, "dd.mm.yyyy"))
      Call newdoc.Save(False,False)
   End If
End Sub

robert
Titel: Re:Datumsproblem
Beitrag von: Glombi am 12.08.03 - 11:59:21
Hi ata,
wenn ich mir Dein Script so ansehe, kann man das auch so machen:

Function FormatDatum( sDatum As String ) As String
  FormatDatum = Format$(sDatum,"Short Date")
End Function

Oder?

Andreas
Titel: Re:Datumsproblem
Beitrag von: Glombi am 12.08.03 - 12:07:00
@robert:
Wo ist denn das Date$ her  ???

So wie es im Code steht, ist es nicht initialisiert und daher immer = "".
Es müsste sowas wie
Date = cstr(readstringdate)
geben

Andreas
Titel: Re:Datumsproblem
Beitrag von: ata am 12.08.03 - 12:11:47
@Glombi

... ich hatte in der Vergangenheit mal Probleme beim Format$ - daher meine Umgehung - ich weiß allerdings nicht mehr welche Version - seither wandle ich das Datum auf diese oder ähnliche Weise...

... kann gut sein, daß die jetzigen Versionen damit keine Probleme haben, aber was, wenn wieder einer mit ner Buggy-Version arbeitet / arbeiten muß...

ata
Titel: Re:Datumsproblem
Beitrag von: robertpp am 12.08.03 - 12:58:21
@glombi

Ich brauch das Date$ nicht setzen. Du kannst zb. mit "Print Date$" das aktuelle Datum ausgeben lassen.
Titel: Re:Datumsproblem
Beitrag von: Glombi am 12.08.03 - 13:45:26
Hi,
Du hast Recht! Date ist eine Script Funktion. Das hatte ich übersehen, da ich immer Today verwende.
"The Date function is equivalent to the Today function."

Na, doppelt hält besser  ;D

Zurück zu Deinem problem: Was steht denn in den Log Dokumenten im Feld "LogDate"?

Andreas
Titel: Re:Datumsproblem
Beitrag von: robertpp am 12.08.03 - 15:30:44
Na bis jetzt ist immer das "31.12.9999" drinnen gestanden nachdem das logging eine neues doc erstellt hat.
robert
Titel: Re:Datumsproblem
Beitrag von: Sillik am 12.08.03 - 15:47:52
Ich hätt ne kurze Zwischenfrage zum Datum:

Ich hab noch nie mit Datumswerten gearbeitet. Also, ich hab ein Dokument mit einem Datumsfeld. Ich will jetzt auslesen wieviele Tage diese Datum schon im vergleich zum heutigen Datum zurückliegt.
Titel: Re:Datumsproblem
Beitrag von: robertpp am 12.08.03 - 16:18:52
benutz mal die suchfunktion mit datum vergleichen da gibt es schon einige einträge im forum
robert
Titel: Re:Datumsproblem
Beitrag von: robertpp am 12.08.03 - 16:21:56
Ich hab da etwas in einer DB gefunden.

   doc.difdate=Int(Cdbl(doc.EndTime(0)-Cdbl(Today)))

Im Feld difdate steht dann die differenz vom heutigen datum zum Feld EndTime.
robert
Titel: Re:Datumsproblem
Beitrag von: Glombi am 12.08.03 - 18:39:15
@Silik,
dazu gibt es die Methode TimeDifference in der Klasse NotesDateTime:

dim difference as Long
difference = notesDateTime.TimeDifference( notesDateTime )

oder (neu in R5)
dim difference as Double
difference = notesDateTime.TimeDifferenceDouble( notesDateTime )

Es wird jeweils die Differenz in Sekunden zurückgegeben.

Double hat einen größeren Wertebereich. Da bekommt man so schnell keinen Overflow.

Andreas
Titel: Re:Datumsproblem
Beitrag von: Glombi am 12.08.03 - 18:41:21
@Robert:
Ersetze
Format(Date$,"dd.mm.yyyy")
durch
Format$(Date$,"Short Date")

Andreas
Titel: Re:Datumsproblem
Beitrag von: Sillik am 13.08.03 - 08:54:28
Funktioniert soweit, bloß bekomm ich die falschen Daten.

In beiden Feldern im Dokument steht 13.08.2003. Wenn ich aber ein notesdatetime mit diesen Feldern dimensioniere krieg ich beim "berechnet beim Anlegen" (erstellungsdatum) Feld den 01.08.2003 und beim "berechnet" (heute) den 01.01.2003. Beie haben den vorgabewert @today. Bei @now passiert das selbe.
Titel: Re:Datumsproblem
Beitrag von: Glombi am 13.08.03 - 09:07:27
Wenn ich aber ein notesdatetime mit diesen Feldern dimensioniere krieg ich beim "berechnet beim Anlegen" (erstellungsdatum) Feld den 01.08.2003 und beim "berechnet" (heute) den 01.01.2003. Beie haben den vorgabewert @today. Bei @now passiert das selbe.

Poste mal den Code...

Andreas
Titel: Re:Datumsproblem
Beitrag von: Sillik am 13.08.03 - 09:12:55
Sub Click(Source As Button)
   Dim uiws As New notesuiworkspace
   Dim uidoc As notesuidocument
   Set uidoc = uiws.currentdocument
   Dim todaynow As New notesdatetime("date_1_1")
   Dim doccreated As New notesdatetime("date_1")
   Dim difference As Double
   
   difference = doccreated.timedifferencedouble(todaynow)
   
   Msgbox difference
End Sub
Titel: Re:Datumsproblem
Beitrag von: Glombi am 13.08.03 - 09:18:09
Hi,
was soll

 Dim todaynow As New notesdatetime("date_1_1")
 Dim doccreated As New notesdatetime("date_1")

das denn sein?

Andreas

Titel: Re:Datumsproblem
Beitrag von: Sillik am 13.08.03 - 09:39:21
Ich setze die notesdatetime felder mit den werten der datumsfelder. So stehts in der Hilfe. Ich hab noch keine erfahrung damit.
Titel: Re:Datumsproblem
Beitrag von: Glombi am 13.08.03 - 09:47:15
Mit "date_1" kann Notes nichts anfangen, ein Wunder dass es überhaupt was zurückliefert.

Korrekt wäre:
Sub Click(Source As Button)
   Dim uiws As New notesuiworkspace
   Dim uidoc As notesuidocument
dim doc as NotesDocument
   Set uidoc = uiws.currentdocument
set doc = uidoc.Document
   Dim todaynow As New notesdatetime(doc.GetItemValue("date_1_1")(0))
   Dim doccreated As New notesdatetime(doc.GetItemValue("date_1")(0))
   Dim difference As Double
   
   difference = doccreated.timedifferencedouble(todaynow)
   
   Msgbox difference
End Sub

Titel: Re:Datumsproblem
Beitrag von: Sillik am 13.08.03 - 10:30:31
So hauts hin, thx
Titel: Re:Datumsproblem
Beitrag von: robertpp am 13.08.03 - 14:55:07
Hallo Glombi!!
das mit dem "Short Date" geht auch nicht!!

na vielleicht gibt es sonst noch eine lösung

robert