with Ada.Text_IO; use Ada.Text_IO;
with Ada.Calendar;
procedure Schreibe_Datum_und_Uhrzeit is
    
    Stunden_pro_Tag     : constant Natural := 24;
    Minuten_pro_Stunde  : constant Natural := 60;
    Sekunden_pro_Minute : constant Natural := 60;
    
    subtype Stunden  is Natural range 0 .. Stunden_pro_Tag - 1;
    subtype Minuten  is Natural range 0 .. Minuten_pro_Stunde - 1;
    subtype Sekunden is Natural range 0 .. Sekunden_pro_Minute - 1;
            
    Jahr    : Ada.Calendar.Year_Number;
    Monat   : Ada.Calendar.Month_Number;
    Tag     : Ada.Calendar.Day_Number;
    Stunde  : Stunden;
    Minute  : Minuten;
    Sekunde : Sekunden;

    aktuelle_Uhrzeit : Ada.Calendar.Time
                     := Ada.Calendar.Clock;             
                 
    Sekunden_seit_Mitternacht : Ada.Calendar.Day_Duration;
    subtype Ganzzahl_Sekunden is Natural range
       1 .. Sekunden_pro_Minute * Minuten_pro_Stunde * Stunden_pro_Tag;                 
    GanzSekunden : Ganzzahl_Sekunden;

    package iio is new Ada.Text_IO.Integer_IO (Natural);
        
 begin
    Jahr    := Ada.Calendar.Year(aktuelle_Uhrzeit);
    Monat   := Ada.Calendar.Month(aktuelle_Uhrzeit);
    Tag     := Ada.Calendar.Day(aktuelle_Uhrzeit);
        
    -- Uhrzeit ist mit Arbeit verbunden, erst konvertieren dann umrechnen      
    Sekunden_seit_Mitternacht 
            := Ada.Calendar.Seconds(aktuelle_Uhrzeit);  
    GanzSekunden := Ganzzahl_Sekunden(Sekunden_seit_Mitternacht);
                    
    Sekunde := GanzSekunden MOD
               Sekunden_pro_Minute;
    Minute  := (GanzSekunden /
                Sekunden_pro_Minute) MOD
               Minuten_pro_Stunde;
    Stunde  := ((GanzSekunden /
                 Sekunden_pro_Minute) /
                Minuten_pro_Stunde) MOD
               Stunden_pro_Tag;

    -- Und nun ausgeben                  
    iio.put (Tag,    WIDTH => 0);
    put ('.');
    iio.put (Monat,  WIDTH => 0);
    put ('.');
    iio.put (Jahr,   WIDTH => 0);
    put (", ");
    iio.put (Stunde, WIDTH => 0);
    put (':');
    if Minute < 10 then -- führende Null wird gebraucht
        put ('0');
    end if;    
    iio.put (Minute, WIDTH => 0);
    put (':');    
    if Sekunde < 10 then
        put ('0');
    end if;
    iio.put (Sekunde, WIDTH => 0);
    
end Schreibe_Datum_und_Uhrzeit;              
        
    
    
