¿Cómo podría obtener la fecha del jueves de la semana en curso? Por ejemplo, el jueves de esta semana actual es 7/8/2010Buscar fecha específica en la semana actual
Respuesta
Usted puede hacer esto (alebit torpemente) con el .NET DateTime existente. El truco es usar la enumeración DayOfWeek
como un número entero, ya que denota los días Sol - Sáb en orden numérico ascendente (0-6).
DateTime someDay = DateTime.Today;
var daysTillThursday = (int)someDay.DayOfWeek - (int)DayOfWeek.Thursday;
var thursday = someDay.AddDays(daysTillThursday);
O aún más simple:
var today = DateTime.Today;
var thursday = today.AddDays(-(int)today.DayOfWeek).AddDays(4);
OK, ejecuté una prueba para 2 millones de iteraciones y mi algoritmo alcanza 300ns y su algoritmo (segunda parte) alcanza los 200ns. – ChaosPandion
@ ChaosPandion: Interesante. Asegúrese de que en su prueba de rendimiento cuente el tiempo JIT ejecutando cada caso de prueba dos veces y descartando los resultados de la primera ejecución. De lo contrario, puede ver resultados sesgados ... – LBushkin
@LBushkin - Hmmm, solo bajé 1 carrera de la prueba. – ChaosPandion
Salida esta biblioteca: http://datetimeextensions.codeplex.com/
partir de los ejemplos en la página principal:
DateTime nextFriday = DateTime.Now.Next(DayOfWeek.Friday);
private static DateTime GetDayOfWeek(DayOfWeek dayOfWeek)
{
var date = DateTime.Now;
if (date.DayOfWeek != dayOfWeek)
{
var direction = date.DayOfWeek > dayOfWeek ? -1D : 1D;
do
{
date = date.AddDays(direction);
} while (date.DayOfWeek != dayOfWeek);
}
return date;
}
No necesita hacer un bucle para obtener la respuesta. –
@Steven - No dude en publicar una respuesta si tiene un algoritmo diferente. – ChaosPandion
Lo haría, pero otros me han vencido. –
Pseudo código para encontrar más cercana Jueves:
for 0 to 3 as x
if today + x days is Thursday
return (today + x days)
if today - x days is Thursday
return (today - x days)
pseudo código para encontrar el jueves de esta semana:
lookForward = true
lookBackward = true
FirstDayOfTheWeek = Sunday
for 0 to 6 as x
if today + x days is FirstDayOfTheWeek
lookForward = false
if today - x days is FirstDayOfTheWeek
lookBackward = false
if lookForward and today + x days is Thursday
return (today + x days)
if lookBackward and today - x days is Thursday
return (today - x days)
Lo sentimos, no hablo C# :)
Buen ejercicio ... :) –
Afortunadamente, será útil para otra persona que busque una solución en otro idioma. – Dolph
DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek).AddDays(4)
Tanto usted como LBushkin registraron esta respuesta en cuestión de segundos el uno del otro. Sin embargo, le di crédito porque su ejemplo fue más eficiente (solo una llamada a Today) y él lo explicó. –
Y su respuesta dará el resultado correcto dentro de unos pocos milisegundos de la medianoche, mientras que la mía no lo hará. – Curt
También es cierto. De hecho, creo que es seguro generalizar diciendo que, si tiene la intención de utilizar la marca de tiempo actual más de una vez en un método, debería considerar almacenarla en caché para asegurarse de que está a salvo de las condiciones límite. También es (ligeramente) más rápido. –
// This is fixed...
int thursday = 4;
int difference = thursday - (int)DateTime.Now.DayOfWeek;
DateTime thursdayThisWeek = DateTime.Now.Date.AddDays(difference);
- 1. Recuperar la fecha del lunes de la semana actual
- 2. Seleccione la semana actual usando LINQ
- 3. Buscar la semana de un año dada la fecha en mm/dd/aaaa
- 4. Obtener la fecha del lunes en la semana actual en PHP 4
- 5. Encontrar el rango de fechas de la semana por fecha actual en sql?
- 6. Obtenga la fecha de inicio y la fecha de finalización de la semana actual (inicio de la semana del lunes y finaliza el domingo)
- 7. joda time - agregar días de la semana a la fecha
- 8. Obtener marcas de tiempo de la semana actual
- 9. En .net, conociendo el número de semana ¿cómo puedo obtener la fecha de la semana?
- 10. Buscar algoritmo de fecha de domingo anterior
- 11. Obtener fecha para el lunes y el viernes para la semana actual (PHP)
- 12. Buscar número de días de la semana/fines de semana en un rango de fechas dado
- 13. Buscar archivos en vista clara más nuevos que una fecha específica?
- 14. ¿Cómo se obtiene la "fecha de inicio de la semana" y la "fecha de fin de semana" del número de semana en SQL Server?
- 15. Buscar la fecha del lunes con Python
- 16. ¿Recibe todos los días de la semana actual?
- 17. Fecha de día de la semana en el maravilloso
- 18. de año y semana hasta la fecha en php
- 19. ¿Cómo obtengo la fecha actual?
- 20. Obtener la fecha/hora actual en segundos
- 21. Cómo obtengo la fecha actual en Cocoa
- 22. Mostrar fecha en la localización actual
- 23. ¿Cómo imprimir la fecha actual en JSP?
- 24. ¿Obtener la fecha del primer lunes de la semana?
- 25. Obteniendo la primera/última fecha de la semana
- 26. C segundos desde la fecha específica
- 27. Fecha/hora actual de la fecha de la secuencia?
- 28. Buscar si la hora actual está entre un rango
- 29. ¿Cómo calcular el primer NSDate de la semana actual?
- 30. SQL: cómo obtener el domingo de la semana actual
... a menos que el sistema pasa a considerar el viernes para ser el inicio de la semana, en cuyo caso jueves de esta semana en curso habría 7/15/2010. Por supuesto, es muy poco probable que un sistema considere que el viernes sea el comienzo de la semana, pero no es improbable que el lunes sea el comienzo de la semana. Es posible que deba considerar eso, ya que obtendría un resultado diferente el domingo. –
@Dr. W: Buen punto; la pregunta debe definir qué día se considera que la semana comienza. Por lo general, es domingo, pero podría ser razonablemente el lunes. –
Me acaban de informar que hoy en Italia se considera que el lunes es el comienzo de la semana. –