Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Hoschi2503 am 28.07.05 - 19:54:06

Titel: Datum in Zahl umwandeln
Beitrag von: Hoschi2503 am 28.07.05 - 19:54:06
Hallo Notesgemeinde,

wie kann man  den Wert eines Datumfeldes in eine Zahl (per Lotus Script) konvertieren.

Zum Hintergrund, ich möchte gern den Zeitraum in Tagen zwischen einem Anfangsdatum und einem Enddatum berechnen.

Vielen Dank im voraus
Christian

 :-:
Titel: Re: Datum in Zahl umwandeln
Beitrag von: Axel am 28.07.05 - 20:02:37
Hi,

schau dir mal die Klasse NotesDateTime in der Designer-Hilfe an. Da solltest du alles finden was du brauchst.


Axel
Titel: Re: Datum in Zahl umwandeln
Beitrag von: eknori am 28.07.05 - 20:11:25
ata ( Anton Tauscher ) hatte da mal eine Klasse im Angebot; aber er hat seine Webseite umgebaut. Ich finde es dort nicht mehr ...
Titel: Re: Datum in Zahl umwandeln
Beitrag von: koehlerbv am 28.07.05 - 20:52:40
Wieso so kompliziert ? Datumsfelder sind doch schon Zahlen (vom Typ Variant / DateTime), die letztlich Double (oder entsprechenden Arrays) entspricht.

So ganz schnell hingeschmiert:
Code
	Dim ws As New NotesUIWorkspace
	Dim doc As NotesDocument
	Dim iDifference As Integer
	
	Set doc = ws.CurrentDocument.Document
	iDifference = Cint (doc.EndDate (0) - doc.StartDate (0))
	
	Messagebox "Zeitraum: " & Cstr (iDifference) & " Tage"

Vorher gehört natürlich noch eine Prüfung auf Isdate, und die Datumsvariablen kann man auch ohne weiteres erstmal (zwecks einfacherem / übersichtlicheren Handling) in Variable vom Typ Variant übernehmen.

Wenn es auch im Zeitzonen geht, dann die NotesDateTime Class, aber sonst ...

Bernhard
Titel: Re: Datum in Zahl umwandeln
Beitrag von: Axel am 28.07.05 - 21:03:49
Manchmal denkt man viel zu kompliziert.  :o

Getreu dem Motto: "Warum einfach, wenn's auch kompliziert geht"   :D


Axel
Titel: Re: Datum in Zahl umwandeln
Beitrag von: koehlerbv am 28.07.05 - 23:35:11
Hallo Axel,

ich habe eben mal einen Uralt-Code (1997) herausgesucht:

Code
	Set itemCutOffDate = docSetup.GetFirstItem ("CutOffDate")
	Set dtCutOffDate = itemCutOffDate.DateTimeValue               			'convert the item to a NotesDateTime object
	vCutOffDate = dtCutOffDate.LSLocalTime             							'convert the NotesDataTime to a variant

Wie bescheuertumständlich war ich damals ?
Das Ganze geht auch in einer Zeile:
vCutOffDate = docSetup.CutOffDate (0)

Mit der Zeit wird man eben weiser - und dafür ist ja auch das Forum da  :)

Dann habe ich mal eine Routine von Ende 2004 herausgesucht, die nach Übergabe zweier NotesItems vom Typ Date/Time die Diffenrenz in Minuten berechnet:

Code
Name	GetTimeDifferenceMin
Type	Function
Parameters	vStartTime As Variant
vEndTime As Variant
Return Type	Double

Lotuscript
'++LotusScript Development Environment:2:1:GetTimeDifferenceMin:1:8
Function GetTimeDifferenceMin (vStartTime As Variant, vEndTime As Variant) As Double
	'==================================================================================================================
	' Purpose:		Calculates the time difference between two given Date/Time values (normally the time component only)
	'----------------------------------------------------------------------------------------------------------------------------
	' Arguments:
	'					vStartTime - should be a Date / Time value
	'					vEndTime - should be a Date / Time value. If vEndTime is 0:00 it will be converted to 24:00 (= 1) !
		'----------------------------------------------------------------------------------------------------------------------------
	' Returns:		The time difference in minutes if both values are Date/Time values (otherwise 0)
		'----------------------------------------------------------------------------------------------------------------------------
	' Created by:  	Bernhard Koehler on 13.12.2004            Modified by: 
		'----------------------------------------------------------------------------------------------------------------------------
	' Changes:
	'==================================================================================================================
	
	Dim dblDifference As Double
	
	
	On Error Goto ErrorRoutine
	
	'The default value:
	GetTimeDifferenceMin = 0
	
	'Check for valid Date/Time values:
	If Not (Isdate (vStartTime)) Or Not (Isdate (vEndTime)) Then
		Exit Function
	End If
	
	'Because we can't store 24:00 in Notes we use 0:00 and have to convert this value to 24:00 = 1
	If vEndTime = 0 Then
		vEndTime = 1
	End If
	
	dblDifference = vEndTime - vStartTime
	
	dblDifference = dblDifference * 24 * 60
	
	GetTimeDifferenceMin = dblDifference
	
	Exit Function
	
ErrorRoutine:
	GetTimeDifferenceMin = 0
	Call ErrorHandler ("GetTimeDifferenceMin")
	Exit Function
End Function

Dieses Beispiel soll zeigen, wie man auf des Pudels Kern zurückkommt: Datums-/Zeitangaben sind schlichte Double-Zahlen. Wie aber auch schon erwähnt: Wenn es um die Berücksichtigung von Zeitzonen u.ä. geht, dann kann das wohl Notes, aber dafür werden in einem DT-Object dann auch mehr Informationen zur Verfügung gestellt. Unsere schlichte Datumsseriennummer reicht dann nicht mehr !

Also wie immer: Jedes Werkzeug, wo es hingehört.

Bernhard
Titel: Re: Datum in Zahl umwandeln
Beitrag von: wflamme am 29.07.05 - 00:38:47
Die Schlußfolgerung stimmt nicht so ganz: Im Backend werden immer nur normalisierte UTC-Werte gespeichert, bei der Visualisierung guckt Notes aufs OS und dessen Zeitzonenvorgaben (bei R5 konnte man das -glaube ich- noch einstellen) und rechnet die UI-Werte entsprechend um - an Komfort kaum zu toppen (wenn man noch berücksichtigt daß Notes dem User die Anzeige zusätzlicher Zeitzonen in Kalenderansichten gestattet).

Also, alles was man da an Code zur (scheinbaren) Ausnahmebehandlung hinzupfriemelt, kann's unterm Strich oft nur schlechter machen. Ich empfehle da http://www.dominopower.com/issuesprint/issue200205/travel0502.html[/urll]  und [url]http://www.ibm.com/Search/?q=180001&v=14&lang=en&cc=us&Search.x=0&Search.y=0&Search=Search, wenn man sich mit Zeitzonenfragen, Sommerzeit und Versionskompatibilität beschäftigen muß/will.
Titel: Re: Datum in Zahl umwandeln
Beitrag von: Hoschi2503 am 29.07.05 - 11:46:55
Hallo,

erstmal vielen Dank für Eure Hilfe. Damit kann ich schon eine Menge anfangen. :)

Gruß & schönes Wochenende
Christian