Data da numero settimana

di il
19 risposte

Data da numero settimana

Salve,

mi potete suggerire un modo per ricavare dal numero della settimana la data per esempio del lunedì a cui si riferisce il numero di settimana… per esempio:

31 > 29/07/2024 

grazie.

19 Risposte

  • Re: Data da numero settimana

    Scusa, ma la formula e' “elementare” : una somma e una moltiplicazione!

    primo_gennaio + 7*numero_settimana

    Per avere il lunedi' e' ancora piu' banale: se non e' lunedi', ritorni indietro fino a lunedì!

    Dove e' che trovi “difficolta'”?

  • Re: Data da numero settimana

    Non è sempre così semplice migliorabile.

    La prima settimana dell'anno è quella dal lunedì alla domenica in cui ricade il 4 gennaio.

    Quindi, fermo restando la moltiplicazione, bisogna tenere conto di questa variabilità

  • Re: Data da numero settimana

    Considerando che in un anno ci sono 52 settimane o 53 se la prima settimana ricade tra Mercoledì o giovedì…

    Tenuto conto del primo giorno della prima settimana…

    Il resto è un calcolo semplice.

    Fermo restando eventuali funzioni week…

    Ma tu cosa hai studiato per capire come calcolarlo?

    Programmare non significa scrivere codice con l'uno o l'altro linguaggio.

    Se devi calcolare il pro-rata, al di là del linguaggio che usi,  e che devi propedeuticamente conoscere, devi studiare anche un minimo di contabilità.

    Non puoi comporre una sinfonia se non conosci gli strumenti musicali e la differenza tra aria e sinfonia.

    Piuttosto che chiedere come ricavare il giorno devi studiare come si determinano le settimane dell'anno.

    In questo forum trovi aiuto su errori del codice che scrivi.

    È come chiedere come avvengono i terremoti per poter creare un simulazione di un sisma.

  • Re: Data da numero settimana

    In qualsiasi momento:

    Settimana=Getweekofyear(now)

    Ottieni il numero della settimana in questo momento “now”

    Se la settimana è 10  per la data della 31ma settimana aggiungi 31-10 e poi calcoli il dayofweek per posizionarti al lunedì 

    Se la settimana è 40 togli 40-31 e ricalcoli il dayofweek per posizionarti al lunedì 

    Chiaramente puoi anche partire dal 01/01/AAAA

    controllare il giorno della settimana e intercettare sempre il lunedì (non ricordo se si considera la domenica come primo giorno…) basta una ricerca sul web e se non lo trovi fai la prova con getweekofyear con una domenica e un lunedi. Se incrementa il numero si parte da lunedi. Io non ho il tempo di controllare, mettici un po del tuo…

  • Re: Data da numero settimana

    01/08/2024 - oregon ha scritto:


    Non è sempre così semplice migliorabile.

    Si, lo so che la ‘prima settimana’ dell'anno dipende da che giorno e' il primo dell'anno. 

    Ma, alla fin fine, prima calcoli una data ‘approssimata’, poi 'correggi il tiro'. 

  • Re: Data da numero settimana

    01/08/2024 - migliorabile ha scritto:


    dipende da che giorno e' il primo dell'anno. 

    In realtà dipende da che giorno è il 4 gennaio 

  • Re: Data da numero settimana

    In VB 6.0  ho usato tanto  tempo fa questa routine che funzionava, se non ricordo male, con qualche problema come ha evidenziato Oregon

    01/08/2024 - oregon ha scritto:


    In realtà dipende da che giorno è il 4 gennaio 

    Se ti può essere utile e  la puoi, se vuoi  adattare…

    Dim LSett As Long
        LSett = Val(txtNsettimana.Text) - 1
        txtData.Text DateAdd("ww", LSett, DateSerial(Year(Date), 1, 1))
    
  • Re: Data da numero settimana

    Salve,

    forse non mi sono spiegato bene…

    con questo codice ottengo il numero di settimana dell'anno:

    Imports System.Globalization
    
    Public Class Form1
        Dim dateNow = DateTime.Now
        Dim dfi = DateTimeFormatInfo.CurrentInfo
        Dim calendar = dfi.Calendar
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ' using Thursday because I can.
            Dim weekOfyear = calendar.GetWeekOfYear(dateNow, dfi.CalendarWeekRule, DayOfWeek.Thursday)
    
            Label1.Text = weekOfyear
        End Sub
    End Class

    Devo fare l'opposto cioè dal weekOfyear ricavare la data(gg/mm/aaaa)… ? 

  • Re: Data da numero settimana

    Siete sicuri di non aver confuso la prima settimana con il conteggio del numero di settimane?

    Ha chiesto il modo di sapere da quale data a quale data va la settimana x, nell'esempio la 31ma settimana del 2024.

    Sapendo che settimana è l'1/1 (lun, mar,…dom) e sapendo se è la prima settimana dell'anno (1 e non 52 o 53) basta moltiplicare per 7 una volta identificato il lunedi della prima.settimana.

    Allo stesso modo, al 31/12 posso sapere il numero della settimana e sapere se ci sono 52 o 53 settimane.

    Ha tutti i dati, ma che gli serve di più?

  • Re: Data da numero settimana

    01/08/2024 - tomi ha scritto:


    Salve,

    forse non mi sono spiegato bene…

    con questo codice ottengo il numero di settimana dell'anno:

    Imports System.Globalization
    
    Public Class Form1
        Dim dateNow = DateTime.Now
        Dim dfi = DateTimeFormatInfo.CurrentInfo
        Dim calendar = dfi.Calendar
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ' using Thursday because I can.
            Dim weekOfyear = calendar.GetWeekOfYear(dateNow, dfi.CalendarWeekRule, DayOfWeek.Thursday)
    
            Label1.Text = weekOfyear
        End Sub
    End Class

    Devo fare l'opposto cioè dal weekOfyear ricavare la data(gg/mm/aaaa)… ? 

    Salve, forse non hai letto bene…

    Le settimane sono fatte di 7 giorni…

    Vuoi il codice completo?

    Se da ciò che hai scritto ottieni come numero settimana 25 e dayofweek della stessa data dice che è martedì:

    1. Da lunedi a martedì devi sottrarre un giorno considera che parte da 0 (domenica) e finisce a 6 (sabato)
    2. Per sapere quando sarà lunedì della 30ma settimana basta aggiungere alla data di lunedì della 25ma settimana +(30-25)*7
    3. Per sapere quando sarà domenica della 30ma settimana basta aggiungere alla data del lunedì della 25ma settimana +(30-25)*7+6
  • Re: Data da numero settimana

    31/07/2024 - tomi ha scritto:


    Salve,

    mi potete suggerire un modo per ricavare dal numero della settimana la data per esempio del lunedì a cui si riferisce il numero di settimana… per esempio:

    31 > 29/07/2024 

    grazie.

    Secondo me sihsandrea ti ha dato al soluzione migliore a livello matematico, semplice e veloce, comunque se per te è troppo complicato puoi fare una cosa abbastanza “stupida” ma semplice

    Fai un banale ciclo FOR che inizia dal primo gennaio fino al 31 dicembre, per ogni giorno calcoli il numero della settimana (come hai già fatto nel tuo codice) e vedi se è quello che stavi cercando

    Certamente non è ottimizzato, ma funziona, e per un ciclo FOR FROM 1 TO 365 sicuramente non avrai problemi in termini di prestazioni

  • Re: Data da numero settimana

    A parte le varie formule e logiche etc… e questo era abbastanza sempliciotto…

    intendevo se c'era una funzione già fatta tipo calendar.GetWeekOfYear che dando il  numero di week e l'anno ti restituiva la data…

    comunque grazie dell'interessamento…

  • Re: Data da numero settimana

    Puoi sempre crearti la funzione GetDatesByWeek e la richiami ogni volta che ti serve

    Lanci GetDatesByWeek(settimana, anno) quando ti serve

  • Re: Data da numero settimana

    01/08/2024 - pierovb ha scritto:


    In VB 6.0  ho usato tanto  tempo fa questa routine che funzionava, se non ricordo male, con qualche problema come ha evidenziato Oregon

    01/08/2024 - oregon ha scritto:


    In realtà dipende da che giorno è il 4 gennaio 

    Se ti può essere utile e  la puoi, se vuoi  adattare…

    Dim LSett As Long
        LSett = Val(txtNsettimana.Text) - 1
        txtData.Text DateAdd("ww", LSett, DateSerial(Year(Date), 1, 1))
    

    era il consiglio che cercavo… grazie…

    Label1.Text = DateAdd("ww", NSett - 1, DateSerial(Year(Now), 1, 1))
Devi accedere o registrarti per scrivere nel forum
19 risposte