am întâlnit o situație în care trebuie să obțin doar data și ora. Date
din DateTime
.
Am un DateTime? StartDate
proprietate (Nullable
) utilizată pentru a păstra valoarea datei
am încercat mai jos,
var d = Convert.ToDateTime(StartDate).Date;
dar îmi returnează o dată ca de exemplu. 6/22/2006 12:00:00AM
după ce am făcut var d = Convert.ToDateTime(StartDate).Date.ToString("d");
am reușit să obțin d ca 6/22/2006
…dar nu vreau să-mi convertesc DateTime?
în String
există vreo modalitate de a obține doar Date
fără a folosi ToString("d")
?
Utilizați Data pentru a obține componenta Date a instanței DateTime:
var dateAndTime = DateTime.Now;
var date = dateAndTime.Date;
Cu această abordare, proprietatea Date va returna data de la miezul nopții. Astfel, partea de timp va fi 00:00:00 în acest caz.
Există câteva modalități alternative de a obține doar partea Date, dar tipul de returnare va fi un șir de caractere:
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
Referință: aici.
- De asemenea, returnează
3/11/2014 12:00:00 AM
ceea ce OP nu dorește. El vrea unDateTime
fără o componentă de timp. – > . - Desigur, dar ar trebui să menționați acest lucru în răspunsul dumneavoastră.
Date
nu este răspunsul la întrebarea lui OP (el chiar a folositConvert.ToDateTime(StartDate).Date
). – > . - El a folosit deja
Date
așa că un răspuns care îi cere pur și simplu să folosească proprietateaDate
proprietate este inutil. – > .
încercați acest lucru:string x = DateTime.Now.ToShortDateString()
.
acest lucru va obține data dd/mm/yy dată la șirul x.
- Acest lucru face exact ceea ce caut. Mulțumesc. – > .
- Nu pare să existe în xamarin forms. Deși pe msdn este sugerat sub system namespace. – > .
Cred că întrebarea ta este oarecum… discutabilă.
Cereți o dată fără o oră, dar primiți un răspuns. DateTime
care le are pe amândouă. Totuși, nu cred că ar trebui să fie o problemă în majoritatea cazurilor:
Dacă creați un DateTime
cu o anumită dată și o comparați cu o altă dată, iar ambele au ora setată la miezul nopții, comparațiile vor fi valide și corecte. De ex:
var yesterday = new DateTime(2014, 3, 10);
var today = new DateTime(2014, 3, 11);
var tomorrow = new DateTime(2014, 3, 12);
Compararea și sortarea acestora va funcționa așa cum vă așteptați, la fel și următoarele:
if(today == DateTime.Today){
Console.WriteLine("Today is the day!");
}
Cu alte cuvinte, ar trebui să fie perfect în regulă doar să vă prefaceți că partea de timp nu există.
De asemenea, după cum ați menționat în OP, puteți utiliza proprietatea Date
dacă doriți să vă asigurați că evitați orice componentă temporală:
// 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!");
}
A DateTime
are atât o dată, cât și o oră. Puteți decide singur că într-o anumită proprietate nu veți folosi niciodată partea de dată. Aceasta va fi doar 12:00 AM
, dar nu o veți folosi.
În anumite situații poate fi util să vă scrieți propriul tip care nu poate conține niciodată o componentă de oră. Iată un început:
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;
}
}
Câmpul value
conține componenta 12 AM, dar este private
și nu se vede din exterior. Supraîncărcările de ToString()
se asigură că, dacă nu se solicită altceva, câmpul Date
este scris cu formatul de dată scurt al culturii curente.
DateTime
are întotdeauna o componentă de timp, chiar șiDate
-returnează unDate
cu o oră stabilită la 12:00:00 miezul nopții. Deci nu, nu există nicio modalitate de a obține aDate
numai fără a-l converti în șir de caractere. Dar de ce vă lipsește? – > Por Tim Schmelter.Convert.ToDateTime(StartDate).Date
, utilizațiStartDate.Value.Date
. Ambele vor arunca o excepție în cazul în careStartDate
este nulă, așa că trebuie să vă asigurați că nu este. – > Por Jeppe Stig Nielsen.DateTime
și să ignori pur și simplu partea de timp? – > Por Kjartan.