回答:
時間の部分、タイムゾーン、ローカルとUTCなどを気にせずに単純な日付が必要な場合のために、単純なDate構造体を作成しました。
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
残念ながら、.Net BCLにはありません。日付は通常、時刻が真夜中に設定されたDateTimeオブジェクトとして表されます。
ご想像のとおり、これは、Dateオブジェクトの場合はタイムゾーンの処理をまったく必要としなくても、付随するすべてのタイムゾーンの問題があることを意味します。
dateアプリが1つのタイムゾーンでしか動作しないことを100%確信していない限り、何かを使用することは悪い考えであるという経験から言えます。すべてを保存するdatetimeことで、最も重要なものを含め、両方の世界の最良の部分が得られます。サーバーのタイムゾーン設定が変更された場合にタイムゾーンの悪夢を回避する簡単な方法があり、予期しない方法でデータの書き込みを開始します。 Datetimeあなたはそこにあなたを救うことがdateでき、まったくできませんdate。間違ったタイムゾーンコンテキストで書き始めた場合、修正するのは非常に困難になります。
ラッパークラスを作成します。このようなもの:
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;
}
そして、valueあなたが望むものは何でも公開します。
DateTimeKind.Unspecifiedシリアル化されたときに変換せずに逆シリアル化されるようにすることをお勧めします(タイムゾーンの違いに基づいて日付が変更される可能性があります)。
DateTimeKind.Utcます。に設定しないでください。これDateTimeKind.Unspecifiedにより、含まれるタイムゾーンオフセットでシリアライズ/デシリアライズされることが保証されます。カレンダーの日付はタイムゾーンに関係なく同じなので、システムに調整させないでください。
Date型は、VB.NETで使用されるDateTime型の単なるエイリアスです(intがIntegerになるなど)。これらのタイプにはどちらも、時間の部分が00:00:00に設定されたオブジェクトを返すDateプロパティがあります。
DateTimeには、日付部分を分離するために使用できるDateプロパティがあります。ToStringメソッドの方法は、また、時刻部分が空の場合のみ日付部分を表示するのに良い仕事をしていません。
DateTimeオブジェクトには、値の日付部分のみを返すプロパティがあります。
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);
}
DateTime時刻を0:00:00に設定してa を返します
ありません DateDataType。
ただし、使用できます DateTime.Date、日付のみを取得。
例えば
DateTime date = DateTime.Now.Date;
DateTime.Now.Dateと同じDateTime.Todayです。DateTime.UtcNow日付時刻値を世界時(UTC)として返すはありますが、今日に対応するUTCのメソッドまたはプロパティはありません。DateTimeKind.UtcNow.Date適切な式です。
public class AsOfdates
{
public string DisplayDate { get; set; }
private DateTime TheDate;
public DateTime DateValue
{
get
{
return TheDate.Date;
}
set
{
TheDate = value;
}
}
}