#!/usr/bin/env ruby # This code comes from http://ruby-it.org/pages/Calendario+in+ruby # Check the page for copyright notice and explanations #! /usr/bin/env ruby # goodfriday.rb: Written by Tadayoshi Funaba 1998, 2000, 2002 # $Id: goodfriday.rb,v 1.1 1998-03-08 18:44:44+09 tadf Exp $ # tradotto e aggiornato in italiano da Francesco Stilo require 'date' # I nomi dei mesi e dei giorni, in Italiano # I nomi dei mesi, in Italiano. I Mesi si contano da 1 to 12; # un indice numerico dei mesi rappresentato in questo array # ci da il nome del mese (hence il primo elemento è nullo). # Il nome dei mesi (hence il primo elemento è nil). MESINAMES = [nil] + %w(Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre Novembre Dicembre) # Nomi dei Mesi abbreviati in Italiano. ABBR_MESINAMES = [nil] + %w(Gen Feb Mar Apr Mag Giu Lug Ago Set Ott Nov Dic) # Il nome dei giorni della settimana, in Italiano. I giorni della settimana # si contano da 0 a 6 (eccetto nella settimana commerciale); una # rappresentazione numerica del giorno in questo array ci da il nome del giorno. # Il nome del giorno in Italiano. GIORNINAMES = %w(Domenica Lunedi Martedi Mercoledi Giovedi Venerdi Sabato) # Abbreviati : Nomi dei Giorni, in Italiano. ABBR_GIORNINAMES = %w(Dom Lun Mar Mer Gio Ven Sab) def easter(y) g = (y % 19) + 1 # il resto dell’ anno diviso 19 c = (y / 100) + 1 # anno diviso 100 x = (3 * c / 4) - 12 z = ((8 * c + 5) / 25) - 5 d = (5 * y / 4) - x - 10 e = (11 * g + 20 + z - x) % 30 e += 1 if e == 25 and g > 11 or e == 24 n = 44 - e n += 30 if n < 21 n = n + 7 - ((d + n) % 7) if n <= 31 then [y, 3, n] else [y, 4, n - 31] end end # calcola la domenica tra prima data d1, seconda data d2 e # d3=0 la prima settimana del mese # d3=1 indica la seconda settimana del mese def print_sundays(d1, d2, d3) d1 +=1 while (d1.wday != 0) d1.step(d2, 7) do |date| puts "#{date.day + (d3*7)} #{Date::MESINAMES[date.mon]}" end end # calcola il nome del giorno della settimana abbreviato def Abb_name_of_week(date) Date::ABBR_GIORNINAMES[date.wday] end # la variabile ba legge l'eventuale argomento passato quando si scrive il nome del file c:\calendario.rb 2006 ba = ARGV[0] if not (ba) then ba = Date::today().year.to_i else ba = ba.to_i end es = Date.new(*easter(ba)) puts "" puts "Festivita dipendenti dalla Santa Pasqua" puts "" puts "" [[-9*7, 'Settima Domenica'], [-8*7, 'Sesta Domenica'], [-7*7, 'Quinta Domenica di Quaresima (Domenica di Carnevale)'], [-48, 'Lunedi grasso'], [-47, 'Martedi grasso o di Carnevale'], [-46, 'Mercoledi delle Ceneri'], [-6*7, 'Quarta Domenica di Quaresima'], [-3*7, 'Mothering Sunday'], [-2*7, 'Domenica di Passione'], [-7, 'Domenica delle Palme'], [-3, 'I sepolcri'], [-2, 'Venerdi Santo'], [-1, 'Vigilia di Pasqua'], [0, 'PASQUA '], [1, 'Lunedi di Pasqua o in Albis'], [7, 'Domenica dopo Pasqua'], [5*7, 'Rogation Sunday'], [39, 'Giorno dell Ascensione '], [42, 'Domenica dopo l Ascensione '], [7*7, 'Pentecoste '], [50, 'Whitmonday'], [8*7, 'Domenica Trinita '], [60, 'Corpus Domini ']]. each do |xs| dd = (es + xs.shift) printf "%03s %02d.%02d.%04d : ", Abb_name_of_week(dd), dd.day, dd.month, dd.year printf ' ' + xs.shift + "\n" end puts "" puts "" puts "Festivita con data fissa" puts "" [['1', '1', 'Capodanno'], ['1', '6', 'Befana'], ['1', '15', 'San Mauro'], ['3', '19', 'Festa del Papa'], ['6', '29', 'San Pietro e Paolo'], ['8', '15', 'Festa dell Assunta'], ['10', '4', 'San Francesco'], ['11', '2', 'Tutti i Santi'], ['12', '8', 'Festa dell Immacolata'], ['12', '25', 'Santo Natale'], ['12', '31', 'Ultimo dell anno'], ]. each do |xs| dd = Date.new(ba.to_i, xs.shift.to_i, xs.shift.to_i) printf "%03s %02d.%02d.%04d : ", Abb_name_of_week(dd), dd.day, dd.month, dd.year printf ' ' + xs.shift + "\n" end puts "" print "L'ora legale incomincia l'ultima domenica di marzo : " print_sundays(Date::civil(ba, 3, 24), Date::civil(ba, 3, 31), 0) puts "" print "L'ora legale finisce con l'ultima domenica di ottobre : " print_sundays(Date::civil(ba, 10, 24), Date::civil(ba, 10, 31), 0) puts "" print "La Festa della Mamma, seconda domenica di Maggio, e' : " print_sundays(Date::civil(ba, 5, 1), Date::civil(ba, 5, 7), 1) puts "" print "La Festa di San Mauro, seconda domenica di Luglio, e' : " print_sundays(Date::civil(ba, 7, 1), Date::civil(ba, 7, 7), 1) puts "" puts "" puts "Se vuoi cambiare l'anno scrivi il nome del file 'Calendario.rb' e poi l'anno 'aaaa'" puts "cosi' le FESTE saranno calcolate sull'anno indicato." puts ""