with - datetime data type in c#



Diferença entre System.DateTime.Now e System.DateTime.Today (6)

Alguém pode explicar a diferença entre System.DateTime.Now e System.DateTime.Today em C # .NET? Prós e contras de cada um, se possível.

https://src-bin.com


Answer #1

A propriedade DateTime.Now retorna a data e a hora atuais, por exemplo, 2011-07-01 10:09.45310 .

A propriedade DateTime.Today retorna a data atual com os compêndios de tempo definidos como zero, por exemplo, 2011-07-01 00:00.00000 .

A propriedade DateTime.Today , na verdade, é implementada para retornar DateTime.Now.Date :

public static DateTime Today {
  get {
    DateTime now = DateTime.Now;
    return now.Date;
  }
}

Answer #2

Eu pensei em adicionar esses links -

Voltando à pergunta original, usando o Reflector eu expliquei a diferença no código

 public static DateTime Today
    {
      get
      {
        return DateTime.Now.Date;   // It returns the date part of Now

        //Date Property
       // returns same date as this instance, and the time value set to 12:00:00 midnight (00:00:00) 
      }
    }


    private const long TicksPerMillisecond = 10000L;
    private const long TicksPerDay = 864000000000L;
    private const int MillisPerDay = 86400000;

    public DateTime Date
    {
       get
      {
        long internalTicks = this.InternalTicks; // Date this instance is converted to Ticks 
        return new DateTime((ulong) (internalTicks - internalTicks % 864000000000L) | this.InternalKind);  
// Modulo of TicksPerDay is subtracted - which brings the time to Midnight time 
      }
    }


     public static DateTime Now
        {
          get
          {
           /* this is why I guess Jon Skeet is recommending to use  UtcNow as you can see in one of the above comment*/
            DateTime utcNow = DateTime.UtcNow;


            /* After this i guess it is Timezone conversion */
            bool isAmbiguousLocalDst = false;
            long ticks1 = TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(utcNow, out isAmbiguousLocalDst).Ticks;
            long ticks2 = utcNow.Ticks + ticks1;
            if (ticks2 > 3155378975999999999L)
              return new DateTime(3155378975999999999L, DateTimeKind.Local);
            if (ticks2 < 0L)
              return new DateTime(0L, DateTimeKind.Local);
            else
              return new DateTime(ticks2, DateTimeKind.Local, isAmbiguousLocalDst);
          }
        }

Answer #3

DateTime.Today representa a data atual do sistema com a parte do tempo definida como 00:00:00

e

DateTime.Now representa a data e hora do sistema atual


Answer #4

DateTime.Now.ToShortDateString() exibirá apenas a parte da data


Answer #5

DateTime.Today é DateTime.Now com o tempo definido como zero.

É importante observar que há uma diferença entre um valor DateTime, que representa o número de pulsos decorridos desde a meia-noite de 1º de janeiro de 0000, e a representação de string desse valor DateTime, que expressa um valor de data e hora em um formato específico da cultura específica: https://msdn.microsoft.com/en-us/library/system.datetime.now%28v=vs.110%29.aspx

DateTime.Now.Ticks é o tempo real armazenado por .net (essencialmente hora UTC), o resto são apenas representações (que são importantes para fins de exibição).

Se a propriedade Kind for DateTimeKind.Local ela incluirá implicitamente as informações de fuso horário do computador local. Ao enviar um serviço da Web .net, os valores DateTime são serializados por padrão com as informações de fuso horário incluídas, por exemplo, 2008-10-31T15: 07: 38.6875000-05: 00, e um computador em outro fuso horário ainda pode saber exatamente qual é o horário sendo referido.

Então, usando DateTime.Now e DateTime.Today está perfeitamente bem.

Você normalmente começa a ter problemas quando começa a confundir a representação de string com o valor real e tenta "consertar" o DateTime, quando não está quebrado.


Answer #6
DateTime dt = new DateTime();// gives 01/01/0001 12:00:00 AM
DateTime dt = DateTime.Now;// gives today date with current time
DateTime dt = DateTime.Today;// gives today date and 12:00:00 AM time




datetime