Discussione:
Calcolare giórno della settimana di qualsiasi anno
(troppo vecchio per rispondere)
Lan Area Network
2012-06-22 09:57:21 UTC
Permalink
Ciao

Ho cercato in rete un procediménto per trovare a quale giórno della
settimana, Lunedì, Martedì, una qualsiasi data di un qualsiasi anno
da quando e in vigóre il calendàrio Gregoriano!

Ho trovato questo sito:

http://xoomer.virgilio.it/esongi/formula.htm

Ho rifatto il càlcolo con la data di oggi, ma secondo mè e sbagliata!

Il risultato e 4
374,42857142857142857142857142857


Conoscete un mètodo per fare questi tipo di calcoli!

Ciao e gràzie
martello
2012-06-22 11:02:18 UTC
Permalink
Post by Lan Area Network
Ciao
Ho cercato in rete un procediménto per trovare a quale giórno della
settimana, Lunedì, Martedì, una qualsiasi data di un qualsiasi anno
da quando e in vigóre il calendàrio Gregoriano!
http://xoomer.virgilio.it/esongi/formula.htm
Ho rifatto il càlcolo con la data di oggi, ma secondo mè e sbagliata!
Il risultato e 4
374,42857142857142857142857142857
Conoscete un mètodo per fare questi tipo di calcoli!
Se ti interessa solo risolvere il problema ti consiglio un qualsiasi
foglio di calcolo ( che però forse non va oltre nel passato dal 1900).

Se vuoi una formula per il calcolo manuale ... non so ... ma secondo me
se quella non funziona ... occorre studiarsi il calendario Gregoriano
nei dettagli.
Lan Area Network
2012-06-22 11:44:50 UTC
Permalink
Post by martello
Post by Lan Area Network
http://xoomer.virgilio.it/esongi/formula.htm
Ho rifatto il càlcolo con la data di oggi, ma secondo mè e sbagliata!
Il risultato e 4
374,42857142857142857142857142857
Conoscete un mètodo per fare questi tipo di calcoli!
Se ti interessa solo risolvere il problema ti consiglio un qualsiasi
foglio di calcolo ( che però forse non va oltre nel passato dal 1900).
Se vuoi una formula per il calcolo manuale ... non so ... ma secondo me se
quella non funziona ... occorre studiarsi il calendario Gregoriano nei
dettagli.
si, mi interesserebbe una fòrmula!

Ciao
martello
2012-06-22 13:45:31 UTC
Permalink
Post by Lan Area Network
Post by martello
Se vuoi una formula per il calcolo manuale ... non so ... ma secondo me se
quella non funziona ... occorre studiarsi il calendario Gregoriano nei
dettagli.
si, mi interesserebbe una fòrmula!
Scusa ... la malsana curiosità :-)

Perché?

Se la vuoi ricavare tu per puro esercizio ... non ti serve una formula
già preconfezionata ... ma ti serve studiare il calendario Gregoriano.

Se ti interessa conoscere i giorni della settimana di tutte le date il
problema è già stato risolto via software ed anche in forma gratuita (se
il problema fosse il soldo :-) ).
Lan Area Network
2012-06-22 15:59:06 UTC
Permalink
Post by martello
Post by Lan Area Network
si, mi interesserebbe una fòrmula!
Scusa ... la malsana curiosità :-)
Perché?
Se la vuoi ricavare tu per puro esercizio ... non ti serve una formula già
preconfezionata ... ma ti serve studiare il calendario Gregoriano.
Se ti interessa conoscere i giorni della settimana di tutte le date il
problema è già stato risolto via software ed anche in forma gratuita (se
il problema fosse il soldo :-) ).
mi servirebbe una formula, da utilizzare in un piccolo programma C.
Questa non mi pare affidàbile.

Ciao
Tommaso Russo, Trieste
2012-06-22 19:18:05 UTC
Permalink
Post by Lan Area Network
mi servirebbe una formula, da utilizzare in un piccolo programma C.
Per carita', non metterti tu a codificare in C formule che magari non
capisci bene! Il sapere collettivo ha depositato nella Rete non solo
formule, ma anche algoritmi belli che dimostrati, verificati e testati,
pronti per l'uso. Per esempio questo:

/* Calculate day of week in proleptic Gregorian calendar. */
/* Sunday == 0, Saturday == 6. */
int wday(int year, int month, int day)
{
int adjustment, mm, yy;

adjustment = (14 - month) / 12;
mm = month + 12 * adjustment - 2;
yy = year - adjustment;
return (day + (13 * mm - 1) / 5 +
yy + yy / 4 - yy / 100 + yy / 400) % 7;
}

(tratto da http://rosettacode.org/wiki/Day_of_the_week#C )

"prolettico" significa "applicato (impropriamente) anche a un tempo
precedente quello della definizione": l'algoritmo trova il giorno della
settimana anche per anni inferiori al 1582, anche per anni negativi e
per l'inesistente anno zero, "come se" il Calendario Gregoriano fosse
stato sempre in vigore. Usalo per date posteriori al 15 ottobre 1582 e
vai tranquillo.
--
TRu-TS
Buon vento e cieli sereni
Lan Area Network
2012-06-22 20:19:47 UTC
Permalink
Ti ringràzio!

Mi pare un algoritmo compatto, e semplice!

Ciao
Lan Area Network
2012-06-22 11:55:44 UTC
Permalink
l'esempio riportato dal sito:

x = N + (q)(N - 1) : 4 - (q)(N - 1) : 100 + (q)(N - 1) : 400 + t

1-5-1988.

x = 1988 + (q)(1988-1) : 4 - (q)(1988-1) : 100 + (q)(1988-1) : 400 + 122 =
1988 + 496 - 19 + 4 + 122 = 2591;

x : 7 = 2591 : 7 = 370 col resto di 1;

ciò significa che il 1-5-1988 era domenica.



TABELLA APPLICATIVA DELLE FORMULEresto di x : 7 giorno della settimana

0 sabato

1 domenica

2 lunedì

3 martedì

4 mercoledì

5 giovedì

6 venerdì


Se lo fate con la data di oggi o domani, il risultato e 4.


Ciao
Coso
2012-06-22 16:33:15 UTC
Permalink
Guardando il dito o seguendo la luna, Lan Area Network scrisse in
Post by Lan Area Network
x = N + (q)(N - 1) : 4 - (q)(N - 1) : 100 + (q)(N - 1) : 400 + t
1-5-1988.
x = 1988 + (q)(1988-1) : 4 - (q)(1988-1) : 100 + (q)(1988-1) : 400 + 122 =
1988 + 496 - 19 + 4 + 122 = 2591;
Prima traduciamo queste strane scritte "(q)(n):d" in una piu` usuale
"[n/d]"... e cioe` usando le parentesi quadre per dire che si prende la
parte intera del numero contenuto...
In sostanza diventa:
x = N + [(N-1)/4] - [(N-1)/100] + [(N-1)/400] + t
dove N sarebbe il numero dell'anno del giorno voluto e t il numero di
giorni trascorsi dall'inizio dell'anno fino alla data voluta...

Non so se la formula sia giusta [il fatto che ci siano di mezzo 400 100
e 4 promette bene, ma andrebbe controllata], ma verificandola per...
Post by Lan Area Network
x : 7 = 2591 : 7 = 370 col resto di 1;
ciò significa che il 1-5-1988 era domenica.
TABELLA APPLICATIVA DELLE FORMULEresto di x : 7 giorno della settimana
0 sabato
1 domenica
2 lunedì
3 martedì
4 mercoledì
5 giovedì
6 venerdì
Se lo fate con la data di oggi o domani, il risultato e 4.
... il 22/06/2012 [venerdi`, e quindi dovrebbe dare 6] per il
23/06/2012 [sabato, e quindi dovrebbe dare 0]...
Abbiamo:
N = 2012
t = 31 + 29 + 31 + 30 + 31 + 22
quindi
x = 2012 + [2011/4] - [2011/100] + [2011/400] + 174
= 2012 + 502 - 20 + 5 +174 = 2673
e 2673 modulo 7 da` proprio 6 [venerdi`]...
Con il giorno successivo:
x = 2673 + 1 = 2674
e 2674 modulo 7 da` proprio 0 [sabato].

Non ho capito come fa a risultarti 4, ammenoche` tu non prenda la parte
intera di tutte le somme [sarebbe sbagliato, ma non ho controllato se
e` proprio quel che hai fatto].

Ciao ciao
Claudio
Lan Area Network
2012-06-22 19:02:12 UTC
Permalink
allora ho sbagliato io! :-)

ma quel 174 da dove salta fuòri?

122 era aggiunto perche il 2012 e bisestile

Ciao
Coso
2012-06-23 05:57:37 UTC
Permalink
Guardando il dito o seguendo la luna, Lan Area Network scrisse in
Post by Lan Area Network
ma quel 174 da dove salta fuòri?
E` il t della formula... ovvero i giorni trascorsi dall'inizio
dell'anno...
Post by Lan Area Network
122 era aggiunto perche il 2012 e bisestile
Era poi riferito al primo maggio 1988... quindi il t per quel caso era
dato dalla somma dei 31 giorni di gennaio piu` i 29 giorni di febbraio
[essendo bisestile] piu` i 31 giorni di marzo piu` i 30 giorni di
aprile piu` 1 che e` il primo giorno di maggio... in tutto 122.

La formula funziona... perche` aggiunge 1 per ogni anno; infatti se un
anno [non bisestile] comincia di martedi`, l'anno successivo comincera`
di mercoledi` [volendo basta fare 365 modulo 7]... ne aggiunge uno
ulteriore per tutti gli anni divisibili per 4 [se un bisestile inizia di
martedi`, il successivo iniziera` di giovedi`]; e *quasi* tutti gli
anni divisibili per 4 sono bisestili... ammenoche` non siano anche
divisibili per 100... e per questo sottrae quelli divisibili per 100...
ma c'e` un'ulteriore eccezione per quelli divisibili per 400... e per
questo la formula li somma...

Ciao ciao
Claudio
maitre Aliboron
2012-06-22 18:36:10 UTC
Permalink
Post by Lan Area Network
Conoscete un mètodo per fare questi tipo di calcoli!
Cerca "Formula di Zeller".
Oppure un metodo molto furbo (e abbastanza mnemonico)
e' l'algoritmo di Doomsday di J.H.Conway.

maitre Aliboron
Lan Area Network
2012-06-22 20:15:34 UTC
Permalink
Post by maitre Aliboron
Post by Lan Area Network
Conoscete un mètodo per fare questi tipo di calcoli!
Cerca "Formula di Zeller".
Oppure un metodo molto furbo (e abbastanza mnemonico)
e' l'algoritmo di Doomsday di J.H.Conway.
maitre Aliboron
no, no, l'algoritmo di Doomsday, non lo capisco pròprio!

Ho capito che se trovi il giórno e la data di un giorno, togli 7 aggiungi 7
e via cosi. E trovi quello che cerchi, ma e troppo macchinoso!


Ciao
Ubachef
2012-06-22 19:01:17 UTC
Permalink
Post by Lan Area Network
procediménto
Ma c'è un motivo che ti spinge ad indicare gli accenti di quasi tutte
le parole che scrivi?
--
mic
E d'un tratto capii che il pensare e' per gli stupidi,
mentre i cervelluti si affidano all'ispirazione.
Ah... https://sourceforge.net/projects/cirulla/
Josh
2012-06-23 07:28:23 UTC
Permalink
Post by Ubachef
Post by Lan Area Network
procediménto
Ma c'è un motivo che ti spinge ad indicare gli accenti di quasi tutte
le parole che scrivi?
E' l'italiano gregoriano. Nota che non usa l'accento sull'ausiliare essere:
<<...secondo mè e sbagliata! Il risultato e 4 374--->>
Ubachef
2012-06-23 09:27:17 UTC
Permalink
Post by Lan Area Network
procediménto
Ma c'è un motivo che ti spinge ad indicare gli accenti di quasi tutte le
parole che scrivi?
Ho visto. Inquietante l'abisso della psiche umana.
--
mic
E d'un tratto capii che il pensare e' per gli stupidi,
mentre i cervelluti si affidano all'ispirazione.
Ah... https://sourceforge.net/projects/cirulla/
Lan Area Network
2012-06-23 13:57:01 UTC
Permalink
di quale malattìa soffrirei?
Ubachef
2012-06-23 14:35:54 UTC
Permalink
Post by Lan Area Network
malattìa
Tranquillo, sei sano come un pesce <grin>
--
mic
E d'un tratto capii che il pensare e' per gli stupidi,
mentre i cervelluti si affidano all'ispirazione.
Ah... https://sourceforge.net/projects/cirulla/
Sandro kensan
2012-07-02 15:44:30 UTC
Permalink
Post by Lan Area Network
Ciao
Ho cercato in rete un procediménto per trovare a quale giórno della
settimana, Lunedì, Martedì, una qualsiasi data di un qualsiasi anno
da quando e in vigóre il calendàrio Gregoriano!
Forse lo sai già ma il PHP ha istruzioni molto semplici e potenti per
gestire le date: per esempio

// Prints: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

mktime fa il timestamp ovvero il numero di secondi dalla Unix Epoch
(1970-01-01 00:00:00) e poi date, che accetta molti parametri, da il
giorno della settimana.

L'intervallo di valori va' tipicamente dal 13 dicembre 1901 20:45:54 al
19 gennaio 2038 03:14:07 che corrispondono al minimo e massimo valore
rappresentabili mediante un numero intero a 32 bit con segno.

http://php.html.it/articoli/leggi/929/date-in-php-come-gestirle/

scusate la digressione un po' OT ma sono un appassionato di PHP :)
--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Continua a leggere su narkive:
Loading...