Successivo: , Precedente: , Su: Funzioni di tipo generale   [Contenuti][Indice]


10.2.7 Gestione dell’ora del giorno

Le funzioni systime() e strftime() descritte nella Funzioni per gestire marcature temporali forniscono la funzionalità minima necessaria per visualizzare l’ora del giorno in una forma intelligibile. Sebbene strftime() offra un’ampia gamma di formattazioni, i formati di controllo non sono facili da ricordare o intuitivamente ovvii quando si legge un programma.

La seguente funzione, getlocaltime(), riempie un vettore fornito dall’utente con informazioni sul tempo preformattate. Restituisce una stringa con data e ora corrente formattata come nel programma di utilità date:

# getlocaltime.awk --- ottiene l'ora del giorno in un formato usabile

# Restituisce una stringa nel formato dell'output di date(1)
# Riempie l'argomento del vettore time con valori individuali:
#    time["second"]       -- secondi (0 - 59)
#    time["minute"]       -- minuti (0 - 59)
#    time["hour"]         -- ore (0 - 23)
#    time["althour"]      -- ore (0 - 12)
#    time["monthday"]     -- giorno del mese (1 - 31)
#    time["month"]        -- mese dell'anno (1 - 12)
#    time["monthname"]    -- nome del mese
#    time["shortmonth"]   -- nome breve del mese
#    time["year"]         -- anno modulo 100 (0 - 99)
#    time["fullyear"]     -- anno completo
#    time["weekday"]      -- giorno della settimana (domenica = 0)
#    time["altweekday"]   -- giorno della settimana (lunedì = 0)
#    time["dayname"]      -- nome del giorno della settimana
#    time["shortdayname"] -- nome breve del giorno della settimana
#    time["yearday"]      -- giorno dell'anno (0 - 365)
#    time["timezone"]     -- abbreviazione del nome della zona di fuso orario
#    time["ampm"]         -- designazione di AM o PM
#    time["weeknum"]      -- numero della settimana, domenica primo giorno
#    time["altweeknum"]   -- numero della settimana, lunedì primmo giorno

function getlocaltime(ora,    ret, adesso, i)
{
    # ottiene data e ora una volta sola,
    # evitando chiamate di sistema non necessarie
    adesso = systime()

    # restituisce l'output in stile date(1)
    ret = strftime("%a %e %b %Y, %H.%M.%S, %Z", adesso)

    # clear out target array
    delete time

    # immette i valori, forzando i valori numerici
    # a essere numerici aggiungendo uno 0
    time["second"]       = strftime("%S", adesso) + 0
    time["minute"]       = strftime("%M", adesso) + 0
    time["hour"]         = strftime("%H", adesso) + 0
    time["althour"]      = strftime("%I", adesso) + 0
    time["monthday"]     = strftime("%d", adesso) + 0
    time["month"]        = strftime("%m", adesso) + 0
    time["monthname"]    = strftime("%B", adesso)
    time["shortmonth"]   = strftime("%b", adesso)
    time["year"]         = strftime("%y", adesso) + 0
    time["fullyear"]     = strftime("%Y", adesso) + 0
    time["weekday"]      = strftime("%w", adesso) + 0
    time["altweekday"]   = strftime("%u", adesso) + 0
    time["dayname"]      = strftime("%A", adesso)
    time["shortdayname"] = strftime("%a", adesso)
    time["yearday"]      = strftime("%j", adesso) + 0
    time["timezone"]     = strftime("%Z", adesso)
    time["ampm"]         = strftime("%p", adesso)
    time["weeknum"]      = strftime("%U", adesso) + 0
    time["altweeknum"]   = strftime("%W", adesso) + 0

    return ret
}

Gli indici di stringa sono più facili da usare e leggere rispetto ai vari formati richiesti da strftime(). Il programma alarm illustrato in Un programma di sveglia usa questa funzione. Una progettazione più generica della funzione getlocaltime() avrebbe permesso all’utente di fornire un valore di data e ora opzionale da usare al posto della data/ora corrente.


Successivo: , Precedente: , Su: Funzioni di tipo generale   [Contenuti][Indice]