La mejor manera de crear un DateTime de medianoche en C #

79

Necesito crear un DateTime de medianoche

Acabo de hacer esto:

DateTime endTime = DateTime.Now;
endTime.Subtract(endTime.TimeOfDay);

Aún no lo he probado, supongo que funciona, pero ¿hay una forma mejor / más limpia?

endian
fuente

Respuestas:

167

Solo usa foo.Date, o DateTime.Todaypara la fecha de hoy

Marc Gravell
fuente
1
Vale la pena considerar que la gente generalmente piensa en la medianoche como el último segundo del día, mientras que esto da el primer segundo del día (que es una medianoche diferente). Entonces, si tiene la intención de lograr el significado popular de medianoche, consulte la respuesta de Aruna a continuación (y el comentario de Paul Suart)
jdoer1997
@ jdoer1997: depende de lo que necesite hacer tu aplicación a medianoche. Las aplicaciones que dependen de la fecha, el día de la semana, etc. pueden querer hacer tareas domésticas en el primer tic del nuevo día.
LT Dan
17

DateTime.Today

mmiika
fuente
15
DateTime endTime = DateTime.Now.Date;

Ahora endTime.TimeOfDay.ToString()vuelve"00:00:00"

Zendar
fuente
11

Puede utilizar DateTime.Todaycon los segundos exactos de la medianoche.

    DateTime today = DateTime.Today;
    DateTime mid = today.AddDays(1).AddSeconds(-1);
    Console.WriteLine(string.Format("Today: {0} , Mid Night: {1}", today.ToString(), mid.ToString()));

    Console.ReadLine();

Esto debería imprimir:

Today: 11/24/2016 10:00:00 AM , Mid Night: 11/24/2016 11:59:59 PM
Aruna
fuente
Esto ayudó mucho y es exactamente lo que quería
Matthias McCarthy
4
La medianoche es la primera, es el primer segundo del día, no el último.
Paul Suart
0
var dateMidnight = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMdd"), "yyyyMMdd", CultureInfo.InvariantCulture);
Pedro
fuente
3
Además de proporcionar algún código, agregue algunos detalles adicionales sobre por qué funciona su solución y en qué se diferencia de las soluciones anteriores.
wlh
-1
    private bool IsServiceDatabaseProcessReadyToStart()
    {
        bool isGoodParms = true;
        DateTime currentTime = DateTime.Now;
        //24 Hour Clock
        string[] timeSpan = currentTime.ToString("HH:mm:ss").Split(':');
        //Default to Noon
        int hr = 12;
        int mn = 0;
        int sc = 0;

        if (!string.IsNullOrEmpty(timeSpan[0]))
        {
            hr = Convert.ToInt32(timeSpan[0]);
        }
        else
        {
            isGoodParms = false;
        }

        if (!string.IsNullOrEmpty(timeSpan[1]))
        {
            mn = Convert.ToInt32(timeSpan[1]);
        }
        else
        {
            isGoodParms = false;
        }

        if (!string.IsNullOrEmpty(timeSpan[2]))
        {
            sc = Convert.ToInt32(timeSpan[2]);
        }
        else
        {
            isGoodParms = false;
        }

        if (isGoodParms == true )
        {
            TimeSpan currentTimeSpan = new TimeSpan(hr, mn, sc);
            TimeSpan minTimeSpan = new TimeSpan(0, 0, 0);
            TimeSpan maxTimeSpan = new TimeSpan(0, 04, 59);
            if (currentTimeSpan >= minTimeSpan && currentTimeSpan <= maxTimeSpan)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
David Petersen
fuente
Bienvenido a StackOverflow. Además de proporcionar algún código, proporcione algunos detalles adicionales sobre por qué funciona su solución y en qué se diferencia de las soluciones anteriores.
buczek