Alguien sabe una manera fácil de obtener la fecha del primer día de la semana (lunes aquí en Europa). Sé el año y el número de semana? Voy a hacer esto en C #.
c#
.net
week-number
Poli
fuente
fuente
Respuestas:
Tuve problemas con la solución de @HenkHolterman incluso con la solución de @RobinAndersson.
Leer sobre el estándar ISO 8601 resuelve muy bien el problema. Use el primer jueves como objetivo y no el lunes. El siguiente código funcionará también para la semana 53 de 2009.
fuente
Me gusta la solución provista por Henk Holterman. Pero para ser un poco más independiente de la cultura, debes obtener el primer día de la semana para la cultura actual (no siempre es lunes):
fuente
firstMonday
es un nombre de variable incorrecto para algo que podría no ser un lunes. =)ACTUALIZAR : .NET Core 3.0 y .NET Standard 2.1 se han enviado con este tipo.
¡Buenas noticias! Una solicitud de extracción agregando
System.Globalization.ISOWeek
acaba de fusionar a .NET Core y actualmente está programada para la versión 3.0. Con suerte, se propagará a las otras plataformas .NET en un futuro no muy lejano.Deberías poder usar el
ISOWeek.ToDateTime(int year, int week, DayOfWeek dayOfWeek)
método para calcular esto.Puedes encontrar el código fuente aquí .
fuente
Probablemente la forma más fácil es encontrar el primer lunes del año y luego agregar el número relevante de semanas. Aquí hay un código de muestra. Asume un número de semana que comienza en 1, por cierto:
fuente
Personalmente, aprovecharía la información cultural para obtener el día de la semana y pasar al primer día de la semana de la cultura. No estoy seguro si lo estoy explicando correctamente, aquí hay un ejemplo:
fuente
usando Fluent DateTime http://fluentdatetime.codeplex.com/
fuente
De acuerdo con ISO 8601: 1988 que se usa en Suecia, la primera semana del año es la primera semana que tiene al menos cuatro días dentro del nuevo año.
Entonces, si su semana comienza un lunes, el primer jueves de cualquier año es dentro de la primera semana. Puede DateAdd o DateDiff a partir de eso.
fuente
Suponiendo que el número de la semana comienza en 1
Esto debería darte el primer día de cualquier semana. No he hecho muchas pruebas al respecto, pero parece que funciona. Es una solución más pequeña que la mayoría de las otras que encontré en la web, por lo que quería compartir.
fuente
new DateTime(1,1,YearNumber)
La biblioteca gratuita de períodos de tiempo para .NET incluye la clase conforme ISO 8601 Semana :
fuente
Este funcionó para mí, también tiene la ventaja de esperar una información cultural como parámetro para probar la fórmula con diferentes culturas. Si está vacío, obtiene la información cultural actual ... los valores válidos son: "it", "en-us", "fr", ... y así sucesivamente. El truco consiste en restar el número de semana del primer día del año, que puede ser 1 para indicar que el primer día está dentro de la primera semana. Espero que esto ayude.
fuente
Aquí hay un método que es compatible con los números semanales que Google Analytics, y también el mismo esquema de numeración que utilizamos internamente en Intel, y que estoy seguro de que también se usa en muchos otros contextos.
fuente
Probé algunos códigos anteriores y algunos tienen pequeños errores, cuando intentas diferentes años con diferentes días de inicio de la semana los verás, tomé el código de Jon Skeet, lo arreglé y funciona, código muy simple.
fuente
Cambió ligeramente el código de Mikael Svenson. Encontré la semana del primer lunes y cambié el número de semana.
fuente
La semana 1 se define como la semana que comienza un lunes y contiene el primer jueves del año.
fuente
Para convertir en ambas direcciones, vea aquí: artículo de Wikipedia sobre las fechas de la semana ISO
fuente
Mejoré un poco la solución de Thomas con una anulación:
De lo contrario, la fecha era anterior a una semana.
Gracias Thomas, gran ayuda.
fuente
Utilicé una de las soluciones, pero me dio resultados incorrectos, simplemente porque cuenta el domingo como primer día de la semana.
Cambié:
a:
Y ahora está funcionando como un encanto.
fuente
La solución propuesta no está completa, solo funciona para CalendarWeekRule.FirstFullWeek. Otros tipos de reglas semanales no funcionan. Esto se puede ver usando este caso de prueba:
fuente
He hecho una versión refinada de la solución propuesta que es más simple y parametriza el primer día de la semana:
fuente
Esta es mi solución cuando queremos calcular una fecha dada año, número de semana y día de la semana.
fuente
Simplifiqué el código que proporcionó Mikael Svensson, que es correcto para muchos países de Europa.
fuente
He escrito y probado el siguiente código y funciona perfectamente bien para mí. Avíseme si alguien tiene problemas con esto, también he publicado una pregunta para obtener la mejor respuesta posible. Alguien puede encontrarlo útil.
fuente
GetFirstDateOfWeekByWeekNumber(2020, 29)
para la semana 29 de 2020 esto vuelve07/20/2020
. Pero el primer día de la semana 29 fue07/13/2020
Actualmente, no existe una clase C # que maneje correctamente los números semanales ISO 8601. Aunque puede crear una instancia de una cultura, buscar lo más cercano y corregirlo, creo que es mejor hacer el cálculo completo usted mismo:
fuente