Autor Thema: Datum in Zahl umwandeln  (Gelesen 2559 mal)

Offline Hoschi2503

  • Frischling
  • *
  • Beiträge: 2
Datum in Zahl umwandeln
« 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

 :-:

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Datum in Zahl umwandeln
« Antwort #1 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Datum in Zahl umwandeln
« Antwort #2 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 ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Datum in Zahl umwandeln
« Antwort #3 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

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Datum in Zahl umwandeln
« Antwort #4 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Datum in Zahl umwandeln
« Antwort #5 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
« Letzte Änderung: 28.07.05 - 23:39:05 von koehlerbv »

Offline wflamme

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 690
  • Geschlecht: Männlich
  • Irgendwie geht das schon...
    • wflamme
Re: Datum in Zahl umwandeln
« Antwort #6 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.
Grüße,
Wolfgang

"I love deadlines. I love the whooshing sound they make as they pass by..."
DOUGLAS ADAMS

wflamme@mainz-online.de
http://www.sns1.de/partner/flamme/wflamme.nsf

Offline Hoschi2503

  • Frischling
  • *
  • Beiträge: 2
Re: Datum in Zahl umwandeln
« Antwort #7 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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz