Seite 1 von 3
					
				"Reichweite" des DateGadgets
				Verfasst: 04.11.2013 18:35
				von es_91
				Neulich fiel mir auf, dass man mit dem DateGadget nicht einmal Jahreszahlen um 2050 abspeichern kann. Wieso nicht? Die Reichweite dieses Gadgets scheint auf etwa 2040 begrenzt zu sein. Woher kommt das? Gibt es eine Möglichkeit, die "Reichweite" zu erhöhen?
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 04.11.2013 18:48
				von NicTheQuick
				Das liegt daran, dass der Unix Time Stamp dafür verwendet wird und dieser auf 32 Bit begrenzt ist. Siehe dazu auch in der PB-Hilfe das Kapitel 'Date'.
Note: supported date/time values are 1970-01-01, 00:00:00 for the minimum and 2038-01-19, 03:14:07 for the maximum.
 
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 04.11.2013 19:46
				von edel
				Unter Windows geht das einfach mit #DTM_GETSYSTEMTIME
Code: Alles auswählen
Procedure Main()
  Protected Event
  Protected time.SYSTEMTIME
  
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 500, 500, "")
    
    DateGadget(0, 10, 10, 100, 25)
    
    
    Repeat
      Event = WaitWindowEvent()
      
      If event = #PB_Event_Gadget
        
        If SendMessage_(GadgetID(0), #DTM_GETSYSTEMTIME, 0, time) = #GDT_VALID
          
          Debug time\wYear        
          Debug time\wMonth       
          Debug time\wDayOfWeek   
          Debug time\wDay         
          Debug time\wHour        
          Debug time\wMinute      
          Debug time\wSecond      
          Debug time\wMilliseconds
          Debug "---------------------"
          
        Else
          Debug "Fehler"
        EndIf
        
      EndIf
      
    Until Event = #PB_Event_CloseWindow    
    
  EndIf
  
  
EndProcedure:End main()
 
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 04.11.2013 19:53
				von RSBasic
				Warum das so ist, findest du hier: 
http://de.wikipedia.org/wiki/Jahr-2038-Problem
Da gibt es auch eine Bildanimation, um es besser verstehen zu können.
 
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 05.11.2013 00:02
				von es_91
				Danke sehr!
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 28.01.2014 04:29
				von es_91
				Die Animation auf Wikipedia auf der Seite zum Jahr-2038-Problem zeigt, dass nach einem bestimmten Punkt im Jahr 2038 die Zählung wieder bei 1901 oder so ähnlich beginnt. Das geschieht dadurch, dass beim Hochzählen im Sekundenschritt aus den vielen einsen (111...) plötzlich eine eins ganz "vorne" wird, das höchste Bit wird genutzt.
Das bedeutet doch, dass der Unix Time Stamp in der Lage ist, Daten vor 1970 abzuspeichern und zwar genau bis zu diesem Punkt, wo der Time Stamp 10000000... ist. Oder irre ich da?
Warum erlaubt PureBasic nur die Speicherung von Daten nach 1970, beziehungsweise warum werden die im Dezimalsystem negativen Werte des Datums nicht genutzt?
(Ich schreibe gerade ein Programm bei dem es wertvoll währe, Daten vor 1970 abzuspeichern.)
Dieses Posting geht extremst davon aus, dass "Daten" die Mehrzahl von "Datum" ist. Sollte dem nicht so sein, kannst Du den Autor gern darauf hinweisen!
EDIT: Ich korrigiere: PureBasic erlaubt die Speicherung von Daten _ab_ 1970, teoretisch sogar ab der letzten Sekunde 1969, denn gibt es eine nullte Sekunde?
Dieses Posting geht immernoch extremst davon aus, dass "Daten" die Mehrzahl von "Datum" ist. Sollte dem nicht so sein, kannst Du den Autor gern darauf hinweisen!
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 18.12.2015 00:25
				von Kurzer
				edel hat geschrieben:Unter Windows geht das einfach mit #DTM_GETSYSTEMTIME
Code: Alles auswählen
Procedure Main()
  Protected Event
  Protected time.SYSTEMTIME
  
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 500, 500, "")
    
    DateGadget(0, 10, 10, 100, 25)
...
 
Hallo Edel, das ist zwar ein alter post, aber für mich gerade aktuelles Thema.
Leider funktioniert diese Methode nicht für das CalendarGadget. Hier gibt Sendmessage_ <> = #GDT_VALID zurück.
Gibt es eine ähnliche Lösung für das CalendarGadget?
 
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 18.12.2015 00:32
				von RSBasic
				Bei mir funktioniert es.
Vielleicht liegt es an Windows XP?
 
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 18.12.2015 00:36
				von Kurzer
				Ok, danke fürs Testen, RSBasic. Den Eintrag in der MSDN habe ich auch gelesen, aber der gilt ja eigentlich für die Message an sich, oder? Beim DateGadget funktioniert es nämlich auch unter Win XP, daher ging ich davon aus, dass es auch bei anderen Gadgets funktionieren sollte.
Hmm... nun gut, ich werde damit leben können. 

 
			 
			
					
				Re: "Reichweite" des DateGadgets
				Verfasst: 18.12.2015 01:23
				von RSBasic
				Sorry Kurzer, ich war zu voreilig und habe das Ursprungsthema nicht richtig gelesen.
Damit sollte es funktionieren:
Code: Alles auswählen
EnableExplicit
Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
  Protected *NMHDR.NMHDR
  Protected SYSTEMTIME.SYSTEMTIME
  
  Select uMsg
    Case #WM_NOTIFY
      *NMHDR = lParam
      Select *NMHDR\hwndFrom
        Case GadgetID(1)
          Select *NMHDR\code
            Case #DTN_DATETIMECHANGE
              SendMessage_(GadgetID(1), #MCM_GETCURSEL, 0, SYSTEMTIME)
              Debug Str(SYSTEMTIME\wDay) + "." + Str(SYSTEMTIME\wMonth) + "." + Str(SYSTEMTIME\wYear)
          EndSelect
      EndSelect
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  DateGadget(1, 10, 10, 100, 20)
  
  SetWindowCallback(@WinCallback())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Ich hoffe, bei dir unter Windows XP auch.