Jawaban:
Saya membuat struct Tanggal sederhana untuk saat-saat ketika Anda memerlukan tanggal sederhana tanpa mengkhawatirkan porsi waktu, zona waktu, lokal vs. utc, dll.
Date today = Date.Today;
Date yesterday = Date.Today.AddDays(-1);
Date independenceDay = Date.Parse("2013-07-04");
independenceDay.ToLongString(); // "Thursday, July 4, 2013"
independenceDay.ToShortString(); // "7/4/2013"
independenceDay.ToString(); // "7/4/2013"
independenceDay.ToString("s"); // "2013-07-04"
int july = independenceDay.Month; // 7
Sayangnya, tidak ada di .Net BCL. Tanggal biasanya direpresentasikan sebagai objek DateTime dengan waktu yang disetel ke tengah malam.
Seperti yang bisa Anda tebak, ini berarti Anda memiliki semua masalah zona waktu petugas di sekitarnya, meskipun untuk objek Tanggal Anda sama sekali tidak menginginkan penanganan zona waktu.
dateuntuk apa pun adalah ide yang buruk kecuali Anda 100% yakin aplikasi Anda hanya akan beroperasi dalam satu zona waktu. Menyimpan semuanya untuk datetimememberi Anda yang terbaik dari kedua dunia, termasuk yang paling kritis, cara mudah untuk menghindari mimpi buruk zona waktu jika konfigurasi zona waktu server Anda berubah ... dan mulai menulis data dengan cara yang tidak Anda antisipasi. Datetimedapat menyelamatkan Anda di sana, datetidak bisa sama sekali, dan akan menjadi sangat sulit untuk diperbaiki jika Anda mulai menulis datedengan konteks zona waktu yang salah.
Buat kelas pembungkus. Sesuatu seperti ini:
public class Date:IEquatable<Date>,IEquatable<DateTime>
{
public Date(DateTime date)
{
value = date.Date;
}
public bool Equals(Date other)
{
return other != null && value.Equals(other.value);
}
public bool Equals(DateTime other)
{
return value.Equals(other);
}
public override string ToString()
{
return value.ToString();
}
public static implicit operator DateTime(Date date)
{
return date.value;
}
public static explicit operator Date(DateTime dateTime)
{
return new Date(dateTime);
}
private DateTime value;
}
Dan ungkapkan apa pun yang valueAnda inginkan.
DateTimeKind.Unspecifiedsehingga ketika serial itu akan deserialized tanpa mengubah (mungkin mengubah tanggal berdasarkan yang berbeda dalam zona waktu).
DateTimeKind.Utc. Jangan setel ke DateTimeKind.Unspecifiedkarena itu akan menjamin serialisasi / deserialisasi dengan offset zona waktu yang disertakan! Tanggal kalender tetap sama terlepas dari zona waktu, jadi jangan biarkan sistem menyesuaikannya.
Tipe Tanggal hanyalah alias dari tipe DateTime yang digunakan oleh VB.NET (seperti int menjadi Integer). Kedua tipe ini memiliki properti Tanggal yang mengembalikan Anda objek dengan bagian waktu diatur ke 00:00:00.
Objek DateTime memiliki properti yang mengembalikan hanya bagian tanggal dari nilai.
public static void Main()
{
System.DateTime _Now = DateAndTime.Now;
Console.WriteLine("The Date and Time is " + _Now);
//will return the date and time
Console.WriteLine("The Date Only is " + _Now.Date);
//will return only the date
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
DateTimedengan waktu disetel ke 0:00:00
Tidak ada DateDataType.
Namun Anda dapat menggunakan DateTime.Datehanya untuk mendapatkan Tanggal.
MISALNYA
DateTime date = DateTime.Now.Date;
DateTime.Now.Datesama dengan DateTime.Today. Ada DateTime.UtcNowyang mengembalikan nilai tanggal-waktu sebagai waktu universal (UTC), tetapi tidak ada metode atau properti yang setara dengan UTC untuk Hari Ini; DateTimeKind.UtcNow.Dateadalah ekspresi yang tepat.
Anda dapat mengembalikan DateTime di mana bagian waktunya adalah 00:00:00 dan abaikan saja. Tanggal ditangani sebagai bilangan bulat timestamp sehingga masuk akal untuk menggabungkan tanggal dengan waktu seperti yang ada dalam bilangan bulat.
Untuk ini, Anda perlu menggunakan tanggal, tetapi abaikan nilai waktu.
Biasanya tanggal akan menjadi DateTime dengan waktu 00:00:00
The DateTimejenis memiliki .Dateproperti yang mengembalikan DateTimedengan nilai waktu yang ditetapkan seperti di atas.
public class AsOfdates
{
public string DisplayDate { get; set; }
private DateTime TheDate;
public DateTime DateValue
{
get
{
return TheDate.Date;
}
set
{
TheDate = value;
}
}
}
Anda dapat mencoba salah satu dari berikut ini:
DateTime.Now.ToLongDateString();
DateTime.Now.ToShortDateString();
Tapi tidak ada tipe "Tanggal" di BCL.