2009-04-28 60 views
74

返されるイベントの日付が必要なプログラムに取り組んでいます。私は "DateTime"ではなく "Date"を探しています。日付だけを返すデータ型が必要です...そこにはありますか?日付と日付時刻

答えて

93

いいえありません。 DateTimeは、日付と時刻で構成されるある時点を表します。ただし、日付部分はDateプロパティ(別のDateTime、時刻は00:00:00に設定されています)で取得できます。

DayMonthYearで個別の日付プロパティを取得することができます。

DateTime.Now.ToLongDateString(); 
DateTime.Now.ToShortDateString(); 

をしかし、BCLには「日付」型はありません。

1

時間の部分が00:00:00であるところでDateTimeを返して無視することができます。日付はタイムスタンプ整数として扱われるので、日付と時刻の両方を整数にとって組み合わせることは理にかなっています。

12

残念ながら、.Net BCLにはありません。日付は、通常、時刻が深夜に設定されたDateTimeオブジェクトとして表されます。

これは、Dateオブジェクトの場合、タイムゾーンの処理がまったく必要ない場合でも、その周囲にすべての付帯タイムゾーンの問題があることを意味します。

+0

[日付とDateTime値を使用している場合は、UTCに種類を設定します。対処するタイムゾーン調整はありません。 DateTime date = DateTime.SpecifyKind(DateTime.Today、DateTimeKind、Utc); – Suncat2000

+0

はい、何かのために 'date'を使うことは、あなたのアプリケーションが1つのタイムゾーンでしか動作しないことを100%保証していない限り、悪い考えです。すべてを「datetime」として保存すると、サーバのタイムゾーン設定が変更された場合、タイムゾーンの悪夢を避ける最も簡単な方法、最も批判的な方法など、両方の世界のベストが得られます。 'datetime'はそこであなたを救うことができます。' date'は全くできません。間違ったタイムゾーンコンテキストで 'date'を書き始めるのであれば、修正するのは大変です。 – Kelseydh

0

次のいずれかを試みることができます。

4

Date型は、VB.NETで使用されるDateTime型の単なるエイリアスです(int型と同じように)。これらの両方の型には、時間部分を00:00:00に設定したオブジェクトを返すDateプロパティがあります。

+1

真。 [VB.NET日付型のMSDNドキュメントページ](http://msdn.microsoft.com/en-us/library/3eaydw6e.aspx)のコメント:* .NET Frameworkの対応する型は、[System.DateTime] (http://msdn.microsoft.com/en-us/library/system.datetime.aspx)構造。* – miroxlav

3

DateTimeには、日付部分を分離するために使用できるDateプロパティがあります。また、ToStringメソッドは、時間部分が空のときに日付部分を表示するだけの良い仕事をします。

1

このためには、日付を使用する必要がありますが、時間の値は無視してください。

通常日付DateTimeタイプは、上記のように設定された時間値とDateTimeを返す.Date性質を有する00:00:00

の時間のDateTimeであろう。

1

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); 
} 
+0

この回答は間違っています。 Dateは時刻が0:00:00に設定された 'DateTime'を返します –

7

ラッパークラスを作成します。このようなもの:

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のいずれかを公開してください。

+0

暗黙的で明示的なものは間違っていますか? – Behrooz

+3

私はあなたのコンストラクタが[DateTime.Kind](http://msdn.microsoft.com/en-us/library/system.datetime.kind(v = vs.110).aspx)を ' DateTimeKind.Unspecified'を使用して、シリアル化すると変換せずにデシリアライズされます(タイムゾーンの異なる日付に基づいて変更される可能性があります)。 – OffHeGoes

+1

@OffHeGoes DateTime.Kindを 'DateTimeKind.Utc'に設定します。 *「DateTimeKind.Unspecified」に設定しないでください。これは、含まれているタイムゾーンオフセットでシリアル化/逆シリアル化されることを保証するためです。カレンダーの日付はタイムゾーンに関係なく同じですので、システムで調整しないでください。 – Suncat2000

16

簡単な日付が必要な時には、時間部分、タイムゾーン、ローカルとutcなどを気にせずにシンプルにDate structを作成しました。

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 

https://github.com/claycephus/csharp-date

+2

ありがとう!それは便利です。 – garfbradaz

1

Dateデータ型はありません。

ただし、DateTime.Dateを使用すると、日付のみを取得できます。

E.G.

DateTime date = DateTime.Now.Date; 
+0

Date構造体があり、オブジェクトはDate型として宣言できます。 –

+0

@KalebAndersonデフォルトの実装では.NETではありません。 VB.net Dateについて話しているのであれば、それはまだDateTimeです。 –

+0

'DateTime.Now.Date'は' DateTime.Today'と同じです。日時の値を世界時(UTC)として返す 'DateTime.UtcNow'がありますが、今日はUTCと同等のメソッドやプロパティはありません。 'DateTimeKind.UtcNow.Date'は適切な式です。 – Suncat2000

1
public class AsOfdates 
{ 
    public string DisplayDate { get; set; } 
    private DateTime TheDate; 
    public DateTime DateValue 
    { 
     get 
     { 
      return TheDate.Date; 
     } 

     set 
     { 
      TheDate = value; 
     } 
    }  
} 
+4

あなたの答えにいくつかの説明をすることは役に立ちます。 – Guanxi