Ottenere solo la Data senza Tempo DateTime

mi sono imbattuto in una situazione che, ho bisogno di ottenere solo il Date fuori dal DateTime.

sto avendo un DateTime? StartDate proprietà (Nullable) utilizzato per contenere il valore di data

ho provato di seguito,

var d = Convert.ToDateTime(StartDate).Date;

ma il suo ritorno mi d, es. 6/22/2006 12:00:00AM

dopo aver fatto var d = Convert.ToDateTime(StartDate).Date.ToString("d");

io sono in grado di ottenere d come 6/22/2006..ma io non voglio convertire il mio DateTime? per String

è proprio nessun modo per ottenere solo il Date senza utilizzare il ToString("d")?

Un DateTime ha sempre una componente di tempo, anche il Date-proprietà restituisce un Date con un tempo impostato a 12:00:00 a mezzanotte. Quindi no, non c’è modo di ottenere un Datesolo senza convertirlo in stringa. Ma perché ti mancano?
Invece di Convert.ToDateTime(StartDate).Date, utilizzare StartDate.Value.Date. Sia genererà un’eccezione se il StartDate è null, quindi, si dovrebbe assicurarsi che non è.
Può spiegare perché questo è in realtà un problema? C’è qualche motivo specifico per cui non si può semplicemente utilizzare un DateTime e semplicemente ignorare il tempo?

OriginaleL’autore user3085995 | 2014-03-11

4 Replies
  1. 8

    Utilizzare il Data proprietà per ottenere il componente di Data di istanza di DateTime:

    var dateAndTime = DateTime.Now;
    var date = dateAndTime.Date;

    Con questo approccio, Data proprietà restituisce la data a mezzanotte. Così la parte del tempo verrà 00:00:00 in questo caso.

    Ci sono un paio di modi alternativi per ottenere solo la parte di Data, ma il tipo di ritorno sarà una stringa:

    1.) var date=DateTime.Now.ToString("dd/MM/yyyy"); //Can also use .ToString("dd-MM-yyyy");

    2.) var dateOnlyString = dateTimeNow.ToShortDateString(); //Return 00/00/0000

    Di riferimento: qui.

    Fa anche tornare 3/11/2014 12:00:00 AM che OP non vuole. Lui vuole un DateTime senza una componente di tempo.
    Per che egli, devono portare con il tempo di 00:00:00 se lui non vuole convertire in stringa. Variabile DateTime conterrà sempre il tempo 00:00:00 o dovrà inventare qualche altra variabile.
    Certo, ma si dovrebbe ricordare che nella tua risposta. Date non è la risposta OP domanda (ha anche usato Convert.ToDateTime(StartDate).Date).
    Ha già utilizzato il Date proprietà, in modo che una risposta semplicemente chiedendogli di utilizzare il Date proprietà è uesless.

    OriginaleL’autore Saket

  2. 7

    provare questo:
    string x = DateTime.Now.ToShortDateString().

    questo otterrà la data gg/mm/aa data una stringa x.

    Questo fa esattamente quello che sto cercando. Grazie.
    Non sembra esistere in xamarin forme. Anche se su msdn è proposto nell’spazio dei nomi system.

    OriginaleL’autore Ralph De Guzman

  3. 1

    Penso che si domanda è una sorta di… opinabile.

    Chiedere una data senza tempo, ma ottenere un DateTime, che ha entrambi. Io davvero non credo che dovrebbe essere un problema nella maggior parte dei casi, però:

    Se si crea un DateTime con una certa data, e confrontarlo con un’altra data, e due di questi hanno il loro tempo insieme a mezzanotte, il confronto sarà valido e corretto. Ad esempio:

    var yesterday = new DateTime(2014, 3, 10);
    var today = new DateTime(2014, 3, 11);
    var tomorrow = new DateTime(2014, 3, 12);

    Confronto e ordinamento di questi funzionerà come previsto, e così sarà il seguente:

    if(today == DateTime.Today){
        Console.WriteLine("Today is the day!");
    }

    In altre parole, si dovrebbe essere benissimo solo fingendo come il tempo-parte non esiste.

    Anche, come si è toccato su di te in OP, è possibile utilizzare la proprietà Date se si vuole fare in modo di evitare qualsiasi tempo-componente:

    //Note the addition of hours, minutes and seconds:
    var today = new DateTime(2014, 3, 11, 14, 35, 33); 
    
    if(today == DateTime.Today){
        Console.WriteLine("This never happened...");    
    }
    
    if(today.Date == DateTime.Today){
        Console.WriteLine("...But today is still the day!");    
    }
    Ok, rimossa l’ultima modifica, dal momento che è stato apparentemente non rilevanti.

    OriginaleL’autore Kjartan

  4. -1

    Un DateTime non hanno una data e un orario. Si può decidere con te che in una proprietà specifica è bene non usare mai la parte della data. Sarà solo 12:00 AM, ma non la utilizza.

    In alcune situazioni può essere utile per scrivere il proprio tipo che non possono mai tenere un time-of-day componente. Qui è un inizio:

    struct Date : IFormattable
    {
        readonly DateTime value;
        public Date(DateTime dateAndTime)
        {
            value = dateAndTime.Date;
        }
    
        public string ToString(string format, IFormatProvider formatProvider)
        {
            return value.ToString(format ?? "d", formatProvider);
        }
        public string ToString(string format)
        {
            return ToString(format, null);
        }
        public string ToString(IFormatProvider formatProvider)
        {
            return ToString(null, formatProvider);
        }
        public override string ToString()
        {
            return ToString(null, null);
        }
    
        public static implicit operator DateTime(Date date)
        {
            return date.value;
        }
    }

    Campo value non tenere il 12 AM cosa, ma è private e non è visibile dall’esterno. L’overload di ToString() assicurarsi che se qualcosa è stato richiesto, il Date è scritto con il formato di data breve della cultura corrente.

    OriginaleL’autore Jeppe Stig Nielsen

Lascia un commento