Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Zeitumwandlung in Tage

  1. #1
    Registriert seit
    06.08.2009
    Beiträge
    14
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi! Ich hab ein Problem mit ner Zeitspanne. Stellt euch vor ihr habt eine Tüte Milch die am 02.02.2011 abläuft. Ich will jetzt wissen wieviele Tage die Milch noch haltbar ist. Es stehen alle Zeiten zur Verfügung und auch die Entscheidung ob die Milch noch haltbar ist ist schon getroffen.

    ich wollte jetzt die Zeit durch T#24h teilen um die Tage zu kriegen aber da kommt nix bei raus ausser dass Time nicht in Time konvertiert werden kann.

    Habt ihr ne idee?
    Zitieren Zitieren Zeitumwandlung in Tage  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    ja ... blöde Sache ... wieviel mm hat ein Liter ?
    Vielleicht versuchst du es dann mal mit dem DATE - das ist nämlich schon in Tagen aufgelößt ...

    Gruß
    Larry

  3. #3
    biGPack ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.08.2009
    Beiträge
    14
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    das ist nicht das was ich brauch.
    bei 24H würde mir Date sagen D#1970-01-01

    mit ner while schleife ist das ding in 5 Zeilen erledigt aber die variante find ich einfach nicht elegant genug. zumal die while schleife das system blockt

  4. #4
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Eine TIME-Variable enthält eine Zeitspanne in Millisekunden. Um damit arithmetische Operationen ausführen zu können, musst Du mit Typumwandlungen arbeiten (TIME_TO_UDINT und umgekehrt).

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ... das war nicht das, was ich meinte ...

    Du kannst die Date-Werte in INT wandeln (DATE_to_INT). Nun beide Werte einfach subtrahieren und du hast die Differenz in Tagen.

    Gruß
    Larry

  6. #6
    biGPack ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.08.2009
    Beiträge
    14
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    date1 := TIME_TO_DATE(time1);
    date2 := TIME_TO_DATE(time2);

    int1 := DATE_TO_INT(date1);
    int2 := DATE_TO_INT(date2);

    day := int2-int1;

    entweder mach ich was falsch oder ich raff es nicht.

    Irgendwie steh ich heut auf der Leitung
    Geändert von biGPack (27.01.2011 um 13:38 Uhr)

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Also mal langsam ...
    Du kannst aus dem TIME keinen sinnvollen DATE machen.
    Aber ... irgendwoher kommt doch dein DATE - also der schon genannte "02.02.2011" ... und das heutige Datum ist dann ja das heutige Datum (aus der Systemuhr).
    Diese beiden Werte dann in INT wandeln und subtrahieren.
    Dein Code wäre also dann :
    Code:
    int1 := DATE_TO_INT(date1);
    int2 := DATE_TO_INT(date2);
    
    Anzahl_Tage := int2-int1 ;
    ...

  8. #8
    Registriert seit
    11.08.2009
    Ort
    Bei Hamburg
    Beiträge
    100
    Danke
    19
    Erhielt 30 Danke für 18 Beiträge

    Standard

    In der OSCAT.Lib sind einige Funktionen enthalten die mit Datums- und Zeitberechnungen befassen, vlt. ist ja DAYS_DELTA das was Du suchst?

    Die OSCAT.Lib findest Du unter:
    http://www.oscat.de

  9. Folgender Benutzer sagt Danke zu NochEinProgrammierer für den nützlichen Beitrag:

    biGPack (31.01.2011)

  10. #9
    Registriert seit
    29.08.2006
    Beiträge
    195
    Danke
    0
    Erhielt 35 Danke für 21 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    da du diese anfrage unter codesys stelltst gehe ich mal davon aus das du auch codesys benutzt.

    codesys speichert die datentypen DATE und DT als 32 wert in sekunden seit 1.1.1970.
    TIME und TOD wird in millisekunden als 32 Bit wert gespeichert.
    Mathematische operationen sind mit diesen datentypen nur bedingt möglich.

    du kannst aber alle datentypen entsprechend wandeln:
    time_to_udint macht dir aus T#1s exakt den wert 1000 den du dann als udint beliebig teilen oder multiplizieren kannst.

    nehmen wir nun an du möchtest die tage aus TIME berechnen dann:
    tage := time_to_udint(tx) / 86400000;
    ein tag hat 24*60*60 sekunden und nochmals 100 wegen den millisekunden.
    das ganze mit auflösung in gleitpunktzahl wäre:
    tage := time_to_real(tx) / 86400000.0;

    beispiel dt in tage:
    tage := dt_to_real(tx) / 86400.0;
    ein tag sind 86400 sekunden

    ansonsten schau dir mal die oscat an, falls du dort deine funktion nicht findest kannst du die lib öffnen und im source code schauen wie sowas funktioniert
    OSCAT
    Open Source Community for Automation Technolgy
    www.oscat.de

Ähnliche Themen

  1. softing OPC Tage (DateTime->Format)
    Von BorisDieKlinge80 im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 16.07.2009, 10:07
  2. Reise Tage pro jahr
    Von Jumper im Forum Stammtisch
    Antworten: 28
    Letzter Beitrag: 25.08.2008, 15:22
  3. Ein paar Tage in den Iran ???
    Von GobotheHero im Forum Stammtisch
    Antworten: 15
    Letzter Beitrag: 05.04.2008, 19:58
  4. Sinutrain 30-Tage-Version gesucht
    Von Gerhard Bäurle im Forum Suche - Biete
    Antworten: 0
    Letzter Beitrag: 26.10.2007, 16:46
  5. 8) viel spass die nächsten 18 tage
    Von volker im Forum Stammtisch
    Antworten: 6
    Letzter Beitrag: 08.02.2006, 02:47

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •