Lebenszeit in Sekunden herausfinden

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Hellhound

ich mag nun mal unkonventionelle thesen, die die schulwissenschaft nicht anerkennt.
daraus ist schon manches mal viel geworden, das absolute paradebeispiel ist ja wohl Einstein.
(was glaubst du, was die kollegen am anfang zur relativität der zeit gesagt haben)

klar, Illig kann man nicht unbedingt mit Einstein vergleichen,
aber ich find den gedanken, dass knapp 300Jahre geschichte
einfach frei erfunden wurden einfach reizvoll.
das klingt wie der plot eines klasse science-fiction romans.. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

@mk-soft: Und unter Linux?
Optimismus ist ein Mangel an Information.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@mk-soft: Und unter Linux?
War nicht nach gefragt. Eine Lösung ???

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

War nicht nach gefragt. Eine Lösung ???
eine Windowslösung war auch nicht gefragt. Es war nach eine Lösung gefragt, ganz allgemein.
Optimismus ist ein Mangel an Information.
JohnMC
Beiträge: 85
Registriert: 06.01.2006 17:04
Wohnort: http://www.j-soft.de.ms
Kontaktdaten:

Beitrag von JohnMC »

Hi,

ich war die letzten 2 tage nicht zuhause und bin grad wieder ins forum gekommen.
2 Dinge haben mich zum :o -en gebracht:

1. Dass soviele Beiträge in zu diesxem Thema geschreiben worden sind.
2. Die Lösung von AND51 - 1 ZEILE!!! Oha....ich hab mehr als 20 für die Berechnung benötigt und mirs unnötig schwer gemacht... /:-> /:-> /:->

Naja - ich stell mal den Code rein, mit dem ich die Zeit berechnet hab. Könnt ihr mir sagen, ob ich was falsch gemacht hab!?
Wegen der PB-Date-Funktion gehts erst ab 1970.

Code: Alles auswählen

Procedure schaljahr(datum)
  If DayOfYear(Date(Year(datum),02,29,Hour(datum),Minute(datum),Second(datum)))<>0
    ProcedureReturn 1
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

yearseconds.l
tag.l
jahrgang.l

Repeat
  geb$=InputRequester("Geburtstagdatum eingeben","Bitte gib dein Geburtstagsdatum ein (Schema: TT.MM.JJJJ)","01.01.1970")
Until geb$<>""

jahrgang=Val(Right(geb$,4))
tag=DayOfYear(Date())-1
If jahrgang>1970
  For a=1970 To jahrgang
    If schaljahr(Date(a,11,11,11,11,11))
      yearseconds=yearseconds+(366*86400)
    Else
      yearseconds=yearseconds+(365*86400)
    EndIf
  Next
EndIf

OpenWindow(0,0,0,150,50,"Lebenssekunden",#PB_Window_BorderLess | #PB_Window_SystemMenu)
StickyWindow(0,1)
CreateGadgetList(WindowID(0))
SetGadgetFont(#PB_Default,FontID(LoadFont(#PB_Any,"Trebuchet Ms",8)))
TextGadget(0,0,0,150,50,"")

Repeat
  event=WindowEvent()
  If event=0
    Delay(10)
  EndIf
  SetGadgetText(0,"Du lebst schon "+Str(Date()-((yearseconds)-((365+schaljahr(Date())-tag)*86400)))+" Sekunden!"+Chr(10)+"(c) JohnMC (built: 09.11.06)")
  
Until event=#PB_Event_CloseWindow
End 
; jaPBe Version=2.5.4.22
Grüße...JohnMC
KeyPusher
Beiträge: 52
Registriert: 04.10.2006 10:56

Beitrag von KeyPusher »

wenn das stimmt was hier steht, dann macht eine "zeitrechnung" erst ab ca. 1600 sinn - glaube ich. dazu zwei proceduren die ein datum in sekunden seit dem 1.1.1600 0 uhr umrechnen und auch wieder zurück. der code ist zwar nicht schön, aber ich hoffe er tut's - auch fehlerfrei.

Code: Alles auswählen

OpenConsole()

Procedure.q DateToSek(Date$); JJJJ,MM,TT,SS,MI,SE
    p=FindString(Date$,",",1)   :  Jahr=Val(Left(Date$,p-1))  : Date$=Mid(Date$,p+1,20)
    p=FindString(Date$,",",1) :  Monat=Val(Left(Date$,p-1))   : Date$=Mid(Date$,p+1,20)
    p=FindString(Date$,",",1) :  Tag=Val(Left(Date$,p-1))     : Date$=Mid(Date$,p+1,20)
    p=FindString(Date$,",",1) :  Stunde=Val(Left(Date$,p-1))  : Date$=Mid(Date$,p+1,20)
    p=FindString(Date$,",",1) :  Minute=Val(Left(Date$,p-1))  : Date$=Mid(Date$,p+1,20)
    Sekunde=Val(Date$)

    Monat-1
    Tag-1
    
    If Jahr>1600
        For i=1600 To Jahr-1 Step 4
            If  ( i%4=0 And Not i%100=0 ) Or i%400=0
                SchaltTage+1
            EndIf
        Next i
    EndIf

    If (( Jahr%4=0 And Not Jahr%100=0 ) Or Jahr%400=0) And Monat>1
        SchaltTagJetzt=1
    Else
        SchaltTagJetzt=0
    EndIf

    Jahr-1600
    
    MTag=PeekW(?MonatsTage+(Monat*2))

    Sek.q=Jahr*365
    Sek=(Sek+SchaltTage+MTag+SchaltTagJetzt+Tag)*24
    Sek=(Sek+Stunde)*60
    Sek=(Sek+Minute)*60
    Sek+Sekunde
    ProcedureReturn Sek.q
    
    DataSection
      MonatsTage:
        Data.w 0,31,59,90,120,151,181,212,243,273,304,334,365
    EndDataSection
    
EndProcedure

Procedure.s SekToDate(Sek.q)
    #TagSek=86400
    #JahrSek=365*24*3600
    #SchaltJahrSek=#JahrSek+#TagSek
    TagSek=86400
    Jahr=1600
    Repeat
        If (( Jahr%4=0 And Not Jahr%100=0 ) Or Jahr%400=0)
            If Sek-#SchaltJahrSek>=0
                Jahr+1
                Sek-#SchaltJahrSek
            Else
                Break
            EndIf
        Else
            If Sek-#JahrSek>=0
                Jahr+1
                Sek-#JahrSek
            Else
                Break
            EndIf
        EndIf
    ForEver
    
    If (( Jahr%4=0 And Not Jahr%100=0 ) Or Jahr%400=0)
        SchaltJahr=1
    Else
        SchaltJahr=0
    EndIf
    
    Tage=Sek/#TagSek
    Zeit=Sek%#TagSek
    
    For i=1 To 12
        MTag=PeekW(?MonatsTage+(i*2))
        If SchaltJahr And i>1 : MTag+1 : EndIf
        If MTag>Tage : Break : EndIf
        vorMTag=MTag
    Next i
    Monat=i
    Tag=Tage-vorMTag+1

    Stunde=Zeit/3600 : Zeit=Zeit%3600
    Minute=Zeit/60 : Sekunde=Zeit%60
    
    ProcedureReturn StrQ(Jahr)+"."+RSet(StrQ(Monat),2,"0")+"."+RSet(StrQ(Tag),2,"0")+"  "+RSet(StrQ(Stunde),2,"0")+":"+RSet(StrQ(Minute),2,"0")+":"+RSet(StrQ(Sekunde),2,"0")

EndProcedure

Sek.q=DateToSek(FormatDate("%yyyy,%mm,%dd%,%hh,%ii,%ss", Date()))
PrintN("Jetziges Datum in Sekunden seit dem 01.01.1600 0 Uhr:")
PrintN(StrQ(Sek))
PrintN("")
PrintN("Und die Sekunden zurück in ein Datum:")
PrintN(SekToDate(Sek))

Input()
CloseConsole()
Antworten