tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
2057
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von cocoon
    cocoon cocoon ist offline Mitglied Brokat
    Registriert seit
    Nov 2001
    Beiträge
    437
    Ich benötige einen Befehl, der mir von zwei Zeitangaben im Format HH:MM die Differenz berechnet im Format HH Stunden, MM Minuten, also z.B.

    Beginn 10:30
    Ende 12:15
    Differenz 1 Stunde, 45 Minuten

    Ich habe dank Google dazu auch fertigen LaTeX-Code gefunden und war in der Lage, diesen etwas meinen Bedürfnissen anzupassen. Leider komme ich aber an der Stelle nicht weiter, wo man folgende Fallunterscheidungen machen müsste:
    - Wenn 1 Stunde, dann "Stunde" sonst "Stunden" schreiben
    - Wenn 1 Minute, dann "Minute" sonst "Minuten" schreiben
    - Wenn 0 Stunden, dann ganz weglassen
    - Wenn 0 Minuten, dann ganz weglassen

    Leider habe ich mit if-then-else-Strukturen in LaTeX keine Erfahrung. Vielleicht kann jemand von Euch helfen. Hier der Code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    % function to compute the difference between two times hh:mm
    \newcount\hours
    \newcount\minutes
    %
    \def\gettime#1:#2\relax#3#4{\def#3{#1}\def#4{#2}}
    %
    \newcommand{\sub}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}%
    \expandafter\gettime#2\relax{\subhrs}{\submins}%
    \hours=\hrs\relax
    \advance\hours by -\subhrs\relax
    \minutes=\mins\relax
    \advance\minutes by -\submins\relax
    \ifnum\minutes>59\relax
    \advance\minutes by -60\relax
    \advance\hours by 1\relax
    \else
    \ifnum\minutes<0\relax
    \advance\minutes by 60\relax
    \advance\hours by -1\relax
    \fi
    \fi
    \ifnum\hours>23\relax
    \advance\hours by -24\relax
    \else
    \ifnum\hours<0\relax
    \advance\hours by 24\relax
    \fi
    \fi
    \ifnum\hours>0\relax
    \ifnum\minutes<10\relax
    \xdef#1{\number\hours\,Stunden, 0\number\minutes\,Minuten}%
    \else
    \xdef#1{\number\hours\,Stunden, \number\minutes\,Minuten}%
    \fi
    \fi
    \ifnum\hours=0\relax
    \ifnum\minutes<10\relax
    \xdef#1{0\number\minutes\,Minuten}%
    \else
    \xdef#1{\number\minutes\,Minuten}%
    \fi
    \fi
    }
     
    Nur tote Fische schwimmen mit dem Strom

  2. #2
    Avatar von cocoon
    cocoon cocoon ist offline Mitglied Brokat
    Registriert seit
    Nov 2001
    Beiträge
    437
    Okay, war in der Lage, es dann doch relativ unproblematisch selbst rauszufinden. Ist vielleicht nicht die eleganteste Lösung, aber es läuft und für LaTeX reicht es allemal. Der fertige Code steht unten; die Logik von if-then-else-Strukturen (mit Zahlen) in LaTeX ist wie folgt (es gibt sonst auch noch ein extra Paket für LaTeX namens ifthen, das die ganze Sache intuitiver machen soll und auch z.B. String-Vergleiche erlaubt):

    Code :
    1
    2
    3
    4
    5
    6
    
    % if-then-else in LaTeX
    \ifnum\myvar>10\relax
       % Anweisung im if-Fall
    \else
       % Anweisung im else-Fall
    \fi

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    
    % function to compute the difference between two times hh:mm
    \newcount\hours
    \newcount\minutes
    %
    \def\gettime#1:#2\relax#3#4{\def#3{#1}\def#4{#2}}
    %
    \newcommand{\sub}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}%
    \expandafter\gettime#2\relax{\subhrs}{\submins}%
    \hours=\hrs\relax
    \advance\hours by -\subhrs\relax
    \minutes=\mins\relax
    \advance\minutes by -\submins\relax
    \ifnum\minutes>59\relax
    \advance\minutes by -60\relax
    \advance\hours by 1\relax
    \else
    \ifnum\minutes<0\relax
    \advance\minutes by 60\relax
    \advance\hours by -1\relax
    \fi
    \fi
    \ifnum\hours>23\relax
    \advance\hours by -24\relax
    \else
    \ifnum\hours<0\relax
    \advance\hours by 24\relax
    \fi
    \fi
     
    \ifnum\hours>0\relax
      \ifnum\hours=1\relax
        % 1 Stunde
        \ifnum\minutes<10\relax
          \ifnum\minutes=0\relax
            \xdef#1{\number\hours\,Stunde}%
          \else
            \ifnum\minutes=1\relax
              \xdef#1{\number\hours\,Stunde, 0\number\minutes\,Minute}%
            \else
              \xdef#1{\number\hours\,Stunde, 0\number\minutes\,Minuten}%
            \fi
          \fi
        \else
          \xdef#1{\number\hours\,Stunde, \number\minutes\,Minuten}%
        \fi
      \else
        % x Stunden
        \ifnum\minutes<10\relax
          \ifnum\minutes=0\relax
            \xdef#1{\number\hours\,Stunden}%
          \else
            \ifnum\minutes=1\relax
              \xdef#1{\number\hours\,Stunden, 0\number\minutes\,Minute}%
            \else
              \xdef#1{\number\hours\,Stunden, 0\number\minutes\,Minuten}%
            \fi
          \fi
        \else
          \xdef#1{\number\hours\,Stunden, \number\minutes\,Minuten}%
        \fi
      \fi
    \else
      \ifnum\minutes<10\relax
          \ifnum\minutes=1\relax
            \xdef#1{0\number\minutes\,Minute}%
          \else
            \xdef#1{0\number\minutes\,Minuten}%
          \fi
        \else
          \xdef#1{\number\minutes\,Minuten}%
        \fi
    \fi
    }
     
    Nur tote Fische schwimmen mit dem Strom

Ähnliche Themen

  1. Differenz zwischen zwei Daten
    Von Tommy57 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 07.12.10, 01:42
  2. SQLite: Differenz zwischen zwei Datumseinträgen
    Von basti33 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.06.07, 17:55
  3. Differenz zwischen zwei Zeit-Stempel berechnen
    Von Shadow-Rider im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 13.01.05, 11:19
  4. Differenz zweier Zeiten
    Von Julian Maicher im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 10.01.05, 15:19
  5. Mit Daten rechnen: Eingabe, Differenz zwischen zwei Daten (auch wenn Gebtag vor 1970)
    Von nicklex im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 1
    Letzter Beitrag: 23.09.04, 11:34

Stichworte