Saltar al contenido principal

 none
Como saber el total de semanas de un año. RRS feed

  • Pregunta

  • Buenas.

    Necesito saber el total de semanas que tiene un año. si son 52 o 53

    El problema lo tengo cuando llego a una semana debo de restar 4 semanas para eliminar unos ficheros

    luego cuando llegue a la semana 1 del 2020 no puedo restar 4

    pero si puedo condicionarlo pero sabiendo si son 52 o 53

    Pero no se como saber las semanas de un año 

    PD:

    para saber la semana en curso tengo esto

     ' Numero de semana del año
            Dim currentCulture As System.Globalization.CultureInfo
            currentCulture = Globalization.CultureInfo.CurrentCulture
            Dim weekNum As Integer = currentCulture.Calendar.GetWeekOfYear(DateTime.Today, Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)


    Saludos a toda la comunidad.



    • Editado FerScrich sábado, 19 de octubre de 2019 16:21
    sábado, 19 de octubre de 2019 16:17

Respuestas

  • Hola:
    Si quieres saber el numero de semana del ultimo domingo del año.
    En un Form como el de la imagen

    Copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            txtNSemana.ReadOnly = True
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim FinalAño As Date = DateSerial(CInt(txtAño.Text), 12, 31)
            Dim DiaSemana As Integer = FinalAño.DayOfWeek
            Dim UltimoDomingo As Date = DateSerial(CInt(txtAño.Text), 12, (31 - DiaSemana))
            Dim NumSemana As Integer = DatePart(DateInterval.WeekOfYear, UltimoDomingo, FirstDayOfWeek.Monday)
            txtNSemana.Text = NumSemana.ToString
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta FerScrich lunes, 21 de octubre de 2019 7:28
    lunes, 21 de octubre de 2019 6:07

Todas las respuestas

  • Hola:
    > para saber la semana en curso tengo esto <
    Si sabes cual es la semana de una fecha dada, ¿ porque no preguntas por la semana del 31/12/yyyy ?
    Un saludo desde Bilbo
    Carlos
    sábado, 19 de octubre de 2019 19:38
  • Hola:
    > para saber la semana en curso tengo esto <
    Si sabes cual es la semana de una fecha dada, ¿ porque no preguntas por la semana del 31/12/yyyy ?
    Un saludo desde Bilbo
    Carlos

    Gracias por tu respuesta, pero asi no me vale ya que da que este año tiene 53 semanas cuando no es asi.


    Saludos a toda la comunidad.

    domingo, 20 de octubre de 2019 6:07
  • Esto me podria valer , pero no se si es lo correcto.

     'Muestra el número total de semanas en el año actual.
            Dim LastDay = New System.DateTime(DateTime.Now.Year, 12, 29) 'año,mes,dia
            Dim currentCulture As System.Globalization.CultureInfo
            currentCulture = Globalization.CultureInfo.CurrentCulture
            Dim weekNum As Integer = currentCulture.Calendar.GetWeekOfYear(LastDay, Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
            '   MsgBox(weekNum)

    Si en LastDay  pongo el dia 31 me salen 53 semanas que en el 2019 son 52 asi que si juego a poner dia 29 sale correcto.

    Pero y en otros años???


    Saludos a toda la comunidad.

    domingo, 20 de octubre de 2019 7:26
  • Hola:
    Viendo la siguiente imagen, yo no se si tiene 52 o 53 semanas.

    Un saludo desde Bilbo
    Carlos
    domingo, 20 de octubre de 2019 9:41
  • jejeje...

     todo depende del ojo que lo ve jajajaja

    https://espanol.epochconverter.com/semanas/2019

    Evidentemente si en vez de poner mes 12 dia 31  pongo mes 12 dia 29  son las 52 semanas ya que la 53 son solo dos dias y la semana tiene 7

    En el año 2020  la primera semana esta compuesta de los dias 30 y 31 del 2019


    Saludos a toda la comunidad.

    domingo, 20 de octubre de 2019 10:10
  • Pero que pasa si cuentas los Domingos? Eso te llevaría a contar semanas independientemente de los dias de la ultma semana cul fuese  ej

      Dim semana As Date = DateTimePicker1.Value
            Dim i As Integer = 0
            For A As Integer = 0 To 29
                If i = 4 Then
    
                    MessageBox.Show(semana)
    
                    Exit For
               End If
                semana = DateAdd(DateInterval.Day, -1, semana)
                If semana.DayOfWeek = DayOfWeek.Sunday Then
                    i += 1
                End If
    
            Next

     Si DataTimePicker tuviéra la fecha del 1 semana de 2020 inicio de fecha  sería 08/12/2019 .O hay algo que  no entiedno?

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗



    • Editado Marcelo PF domingo, 20 de octubre de 2019 16:08
    domingo, 20 de octubre de 2019 16:05
  • Hola:
    Si quieres saber el numero de semana del ultimo domingo del año.
    En un Form como el de la imagen

    Copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            txtNSemana.ReadOnly = True
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim FinalAño As Date = DateSerial(CInt(txtAño.Text), 12, 31)
            Dim DiaSemana As Integer = FinalAño.DayOfWeek
            Dim UltimoDomingo As Date = DateSerial(CInt(txtAño.Text), 12, (31 - DiaSemana))
            Dim NumSemana As Integer = DatePart(DateInterval.WeekOfYear, UltimoDomingo, FirstDayOfWeek.Monday)
            txtNSemana.Text = NumSemana.ToString
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta FerScrich lunes, 21 de octubre de 2019 7:28
    lunes, 21 de octubre de 2019 6:07
  • Muchas gracias  me gusta.

    Te cuento el resto a ver si se explicartelo.

    La aplicacion va generando ficheros usando el numero de semana por ejemplo   Seman_42.txt, semana_43.txt  etc

    Solo guardo 4 semanas las demas las borro de esta manera

      Id = 4  'Elejir numero de semanas a borrar
    
            Dim Semana As Integer = NumSemana - Id
    
            Me.StatusStrip1.Items(0).Text = "Semana: " & Semana
            Me.StatusStrip1.Items(1).Text = "Semana: " & NumSemana & "  de " & TotSemana
            '*****************************************************************************************
    
    
            If File.Exists(AppPath() & "\Altas_Bajas\Semana_" & Semana & ".zip") Or File.Exists(AppPath() & "\Altas_Bajas\Bajas_Semana_" & Semana & ".txt") Then    'Si existe el fichero borrale
    
                For Each foundFile As String In My.Computer.FileSystem.GetFiles(AppPath() & "\Altas_Bajas\", FileIO.SearchOption.SearchAllSubDirectories, "*_Semana_" & Semana & ".*")
                    My.Computer.FileSystem.DeleteFile(foundFile, FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin)
                Next
    
                Me.StatusStrip1.Items(0).Text = "Borrados archivos TXT y ZIP Semana " & Semana
            End If

    NumSemana es la variable que indica la semana actual.  (Ver codigos anteriores)

    Ahora surje el siguiente problema  cuando llegue la semana 1 del 2020  sera numsemana -id  (4)  luego saldra una semana negativa y no borrara porque no existen.

    Estoy mirando varias condiciones pero no encuentro o no me sale una correcta.

    Marco tu anterior respuesta como valida gracias.


    Saludos a toda la comunidad.

    lunes, 21 de octubre de 2019 7:28
  • Hola:

    Si todos los ficheros txt los guardas en la misma carpeta, porque no los "lees" todos y los cargas en DGV.
    Una vez que los visualizas en el DGV, seleccionas los que quieres y borras los seleccionados.

    Un saludo desde Bilbo
    Carlos
    lunes, 21 de octubre de 2019 18:19
  • Asi es como lo hago ahora.

    Pero ya he dado con la clave para eliminarlos automaticamente teniendo en cuenta las semanas de cada año.

    Solucionado

    Dar las gracias por vuestra ayuda. Seguir asi ayudando a los que menos sabemos.

    Gracias


    Saludos a toda la comunidad.

    martes, 22 de octubre de 2019 7:07