Gambas-it

Gambas dal mondo esterno => Spagna => Topic aperto da: vuott - 11 Dicembre 2015, 02:03:02

Titolo: Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: vuott - 11 Dicembre 2015, 02:03:02
 :coder:
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: Gianluigi - 11 Dicembre 2015, 13:52:08
Leggendo questo post mi era venuto in mente questo semplice codice ma stranamente a me funziona solo fino al 12 di ogni mese, e oltre no  :rolleyes:
Codice: [Seleziona]
Public Sub DateChooser1_Change()

  Dim d As Date, s As Integer, valore As String
 
  d = Date(DateChooser1.Value)
  valore = CString(d)
  s = Week(d)
  TextBox1.Text = s & " - " & CString(Val(valore))

End
:mad:  :mad:  :mad:

 :ciao:
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: Gianluigi - 12 Dicembre 2015, 01:31:08
Bisogna proprio che non legga più lo spagnolo.
Io non ho mai usato il DateChooser ma incuriosito dalla domanda che mi pareva banale ho provato a scriverne il risultato così:
Print DateChooser1.Value ottenendo 11/12/2015 00:00:00 come risultato.
Ho dato per scontato che bisognasse ottenere la sola data e da li il codice postato e il qui pro quo che ha coinvolto anche la ML e lo stesso Benoit Minisini & Co.
Mi sarebbe bastato provare il codice in una TextBox e avrei visto che il DateChooser restituiva la sola data già localizzata.
Pertanto se vogliamo visualizzare in una textbox il numero della settimana e la data localizzata basta fare:

Codice: [Seleziona]
TextBox1.Text = Week(DateChooser1.Value) & " - " & DateChooser1.Value
Lo so se mi dicono furbo mi stanno prendendo in giro...
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: vuott - 13 Dicembre 2015, 14:53:31
Conoscere il numero di una settimana (ossia se è la 1a oppure la 2a, etc) nell'arco dell'anno prescelto, è semplice; più complesso è individuare i giorni che appartengono ad una settimana individuata con il suo numero... per esempio quali giorni appartengono alla 20a settimana del 2015 ?
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: Gianluigi - 14 Dicembre 2015, 11:04:11
Conoscere il numero di una settimana (ossia se è la 1a oppure la 2a, etc) nell'arco dell'anno prescelto, è semplice; più complesso è individuare i gorni che appartengono ad una settimana individuata con il suo numero... per esempio quali giorni appartengono alla 20a settimana del 2015 ?

Intendi qualcosa del genere?
Codice: [Seleziona]
Public Sub Form_Open()

  SpinBox2.Value = Year(Now)

End

Public Sub Button1_Click()
 
  Dim i, iSettimana, primo, ultimo, anno As Integer
  Dim primoGiornoAnno, sd1, sd2 As String
  Dim d, d1, d2 As Date
 
  iSettimana = SpinBox1.Value
  anno = SpinBox2.Value
  primoGiornoAnno = "1/1/" & anno 
  d = CDate(primoGiornoAnno)
  i = WeekDay(d)   
  If i >= 0 And i <= 4 Then
    ultimo = (iSettimana * 7) - i + 1
  Else If i = 5
    ultimo = (iSettimana * 7) + 3
  Else If i = 6
    ultimo = (iSettimana * 7) + 2
  Endif 
  primo = ultimo - 6     
  d1 = d + (primo - 1)
  d2 = d + (ultimo - 1)
  sd1 = Format$(d1, "dddd dd/mm/yyyy")
  sd2 = Format$(d2, "dddd dd/mm/yyyy")
  If iSettimana = 53 Then
    If Day(d1) > 28 Then
      Label1.Text = "La settimana n. 53 non esiste da " & sd1 & " a\n" & sd2 & " è la prima dell'anno nuovo"
    Else If Day(d1) > 0 And Day(d1) < 7 Then
      Label1.Text = "La settimana n. 53 non esiste da " & sd1 & " a\n" & sd2 & " è la prima dell'anno nuovo"
    Else
      Label1.Text = "La settimana n. " & iSettimana & " va da " & sd1 & " a " & sd2
    Endif
  Else
    Label1.Text = "La settimana n. " & iSettimana & " va da " & sd1 & " a " & sd2
  Endif
 
End
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: vuott - 14 Dicembre 2015, 11:17:28
La sostanza è quella.
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: Gianluigi - 14 Dicembre 2015, 11:23:31
La sostanza è quella, però il tuo codice riporta i 7 giorni della prima settimana dell'anno corrente (2015) quelli che cominciano con il 1° gennaio. Invece nel 2015 la prima settimana, dovendosi calcolare ad iniziare con il 1° lunedì dell'anno, ha inizio il 5 gennaio.
Devi calibrare questa circostanza.

Non capisco io mi sono attenuto alla regola: La prima settimana (https://it.wikipedia.org/wiki/Settimana) dell'anno si calcola fino a 4 (Giovedì) poi si salta a quella dopo.  :-\
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: vuott - 14 Dicembre 2015, 11:34:50
Sì, hai ragione tu.
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: tornu - 12 Gennaio 2017, 22:58:17
Ciao Gianluigi,
ho utilizzato il codice che hai postato in questa discussione per un mio progetto, funziona tutto regolarmente.
Quello che ti chiedo e se puoi spiegarmi questa parte di codice per capire la logica che hai utilizzato.
Ti ringrazio anticipatamente.

Codice: [Seleziona]
  If i >= 0 And i <= 4 Then
    ultimo = (iSettimana * 7) - i + 1
  Else If i = 5
    ultimo = (iSettimana * 7) + 3
  Else If i = 6
    ultimo = (iSettimana * 7) + 2
  Endif 
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: Gianluigi - 12 Gennaio 2017, 23:34:49
Ciao Gianluigi,
ho utilizzato il codice che hai postato in questa discussione per un mio progetto, funziona tutto regolarmente.
Quello che ti chiedo e se puoi spiegarmi questa parte di codice per capire la logica che hai utilizzato.
Ti ringrazio anticipatamente.

Codice: [Seleziona]
  If i >= 0 And i <= 4 Then
    ultimo = (iSettimana * 7) - i + 1
  Else If i = 5
    ultimo = (iSettimana * 7) + 3
  Else If i = 6
    ultimo = (iSettimana * 7) + 2
  Endif 

Ciao Tornu,
per prima cosa ti devo sgridare, ti sembra questa l'ora di porre una domanda a un vecchietto che deve andare a riposare?  >:(

Poi ti dico; alla buon'ora avevo introdotto uno scherzo (aggiunto prima e tolto dopo) per Vuott ma non solo, per cazzeggiare un po ma anche per vedere se in realtà le persone guardano al codice che uno scrive ed eventualmente lo correggono.
Complimenti vedo che sei il primo ad accorgersene.  :D  :ok:
Meno male che mi sono ricordato, ti allego il progetto originale di allora, sperando che sia quello giusto e che funzioni.
Temo di aver introdotto cose simili in altri codici postati, ma solo per un breve periodo e comunque cose innocue tipo questa  ;D  :P  :-[
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: tornu - 13 Gennaio 2017, 20:46:29
.....
Meno male che mi sono ricordato, ti allego il progetto originale di allora, sperando che sia quello giusto e che funzioni.
.....
Grazie, funziona perfettamente  :ok:
Quello che ti avevo chiesto era se potevi spiegami questo passaggio in particolare
Codice: [Seleziona]
  If i >= 0 And i <= 4 Then
    ultimo = (iSettimana * 7) - i
  Else If i = 5
    ultimo = (iSettimana * 7) + 2
  Else If i = 6
    ultimo = (iSettimana * 7) + 1
  Endif 
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: Gianluigi - 13 Gennaio 2017, 23:02:07
Quindi neanche tu avevi scoperto lo scherzetto  :'(

Tieni presente l'articolo di Wikipedia indicato a Vuott qualche post sopra nella parte in cui si parla delle settimane di 7 giorni e anni di 52 o 53 settimane.

Ecco il codice commentato:
Codice: [Seleziona]
' Nota: Devi tenere a mente che la settimana è di sette giorni ma '
  ' parte da 0 e arriva a 6 e ho ottenuto con weekday il numero del '
  ' primo giorno dell''anno, secondo questa numerazione domenica 0 lunedì 1 ecc. '
  If i >= 0 And i <= 4 Then
    ' Se il primo di gennaio appartiene all''anno nuovo '
    ' (vale a dire se è fra domenica e giovedì) a ultimo '
    ' assegno il numero dei giorni a partire dal primo gennaio. '
    ultimo = (iSettimana * 7) - i
  Else If i = 5
    ' Altrimenti se il primo gennaio è nell''ultima settimana '
    ' dell''anno prima, ottengo i giorni aggiungendo 2 o 1 '
    ' secondo che sia venerdì o sabato, domenica niente '
    ' perchè occorre come detto valutare che si inizia da 0. '
    ultimo = (iSettimana * 7) + 2
  Else If i = 6
    ultimo = (iSettimana * 7) + 1
  Endif

Ti è sufficiente?  :ciao:
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: Gianluigi - 14 Gennaio 2017, 20:07:17
Ciao Tornu,
mentre davo un'occhiata al programma mi sono accorto di un bug che credo sia di Gambas (Trunk) anzi se non hai la trunk potresti fare una prova col codice postato più avanti e riferirmi.
Ne approfitto anche per meglio chiarire il codice che avevo scritto.

Prendiamo in considerazione l'immagine allegata che rappresenta due settimane contenenti l’inizio dell’anno, una (l’arancione) che ha il primo gennaio che cade di mercoledì, l’altra col primo di venerdì.
La settimana arancione è la prima settimana dell’anno e pertanto conterrà 3 giorni che appartengono all’anno precedente. Se io la devo conteggiare per calcolare il numero dei giorni fino ad una data settimana dell’anno, dovrò sottrarre 3.

Di contro se il primo dell’anno cade di venerdì come nel caso della settimana bianca allora sarà l’ultima settimana dell’anno precedente a contenere 2 giorni che appartengono all’anno nuovo e che andranno sommati nel calcolo dei giorni.

Così come avevo concepito il progetto; quando indico il numero delle settimane, per esempio la ventesima, per ottenere l’ultimo giorno della settimana indicata non basta moltiplicare 20 settimane per 7 giorni occorre anche aggiungere o sottrarre come spiegato prima.

Malgrado le tante informazioni ottenute sulle date continuo a non capirci molto, ma credo proprio che questo sia un bug (l’ho segnalato):

Codice: [Seleziona]
Public Sub Main()

  Print CDate("1/1/2017"); Date(2017, 1, 1) ' > 31/12/2016 23:00:0001/01/2017 00:00:00
 

End

Quindi per non sapere ne leggere ne scrivere ti consiglio di usare questo progetto allegato che usa Date al posto di CDate.
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: tornu - 15 Gennaio 2017, 20:59:05
.....
Poi ti dico; alla buon'ora avevo introdotto uno scherzo (aggiunto prima e tolto dopo) per Vuott ma non solo, per cazzeggiare un po ma anche per vedere se in realtà le persone guardano al codice che uno scrive ed eventualmente lo correggono.
.....
Quindi neanche tu avevi scoperto lo scherzetto  :'(

Prima lo metti poi lo togli, e mi chiedi se ho scoperto lo scherzetto... ???
A parte gli scherzetti intanto ti ringrazio per avermi commentato il codice.
Non ho capito a quale bug ti riferisci, sia la versione con CDate che quella con Date a me funzionano
correttamente. La versione che uso è la 3.9.2 Stable da repository.
Non capisco le tue perplessità (ho io non ti ho capito), ma dalle varie prove che ho fatto con date di fine e inizio di vari
anni, con 52 o 53 settimane, i giorni della settimana e il numero della settimana che risultano per me sono corretti visto
che gli ho confrontati con calendari vari, sia cartacei per quelli antecedenti al 2017 che con quello del mio pc per quelli
successivi.
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: Gianluigi - 15 Gennaio 2017, 22:13:22

Non capisco le tue perplessità...

Leggi un po qua (http://gambas.8142.n7.nabble.com/Gambas-Bug-Tracker-Bug-1068-CDate-strange-behavior-on-first-day-of-year-tp58234.html).
Ti conviene usare Date se vuoi che funzioni anche in futuro, perché CDate è stato cambiato.

 :ciao:
Titolo: Re:Il numero di una settimana nell'anno e i giorni che appartengono a una settimana
Inserito da: tornu - 15 Gennaio 2017, 22:55:33
Leggi un po qua (http://gambas.8142.n7.nabble.com/Gambas-Bug-Tracker-Bug-1068-CDate-strange-behavior-on-first-day-of-year-tp58234.html).
Ti conviene usare Date se vuoi che funzioni anche in futuro, perché CDate è stato cambiato.
 :ciao:

Ok, tutto chiaro. Seguo il tuo consiglio  :ciao: