日付と日付時刻


110

私は、イベントの日付を返す必要があるプログラムに取り組んでいます。

私はDateではなくを探していDateTimeます。

日付のみを返すデータ型はありますか?

回答:


131

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

そして、あなたは経由して、個々の日付のプロパティを取得することができDayMonthそしてYear


23

時間の部分、タイムゾーン、ローカルと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

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


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

16

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

ご想像のとおり、これは、Dateオブジェクトの場合はタイムゾーンの処理をまったく必要としなくても、付随するすべてのタイムゾーンの問題があることを意味します。


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

はい、dateアプリが1つのタイムゾーンでしか動作しないことを100%確信していない限り、何かを使用することは悪い考えであるという経験から言えます。すべてを保存するdatetimeことで、最も重要なものを含め、両方の世界の最良の部分が得られます。サーバーのタイムゾーン設定が変更された場合にタイムゾーンの悪夢を回避する簡単な方法があり、予期しない方法でデータの書き込みを開始します。 Datetimeあなたはそこにあなたを救うことがdateでき、まったくできませんdate。間違ったタイムゾーンコンテキストで書き始めた場合、修正するのは非常に困難になります。
Kelsey Hannan

2
@KelseyHannanは、もちろん「生年月日」や「購入日」のようなものを扱っている場合を除いて、国を移動したからといって、不可解に日が変わってしまうことを明示的に望まない場合です。言うまでもないことですが、ニュージーランドでアイルランドの住宅ローン申請を処理することは、非ランダムな例です。
ロジャーウィルコックス

9

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

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あなたが望むものは何でも公開します。


4
コンストラクターでDateTime.Kindをに設定して、DateTimeKind.Unspecifiedシリアル化されたときに変換せずに逆シリアル化されるようにすることをお勧めします(タイムゾーンの違いに基づいて日付が変更される可能性があります)。
oatsoda 2014

1
@OffHeGoes DateTime.Kindをに設定しDateTimeKind.Utcます。設定しないでください。これDateTimeKind.Unspecifiedにより、含まれるタイムゾーンオフセットでシリアライズ/デシリアライズされることが保証されます。カレンダーの日付はタイムゾーンに関係なく同じなので、システムに調整させないでください。
Suncat2000

5

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


1
そうだね。VB.NET DateタイプのMSDN docページには、次のように記載されています。.NET Frameworkの対応するタイプはSystem.DateTime構造です。
miroxlav 2014年

4

DateTimeには、日付部分を分離するために使用できるDateプロパティがあります。ToStringメソッドの方法は、また、時刻部分が空の場合のみ日付部分を表示するのに良い仕事をしていません。


3

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 を返します
Serj Sagan

3

ありません DateDataType。

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

例えば

DateTime date = DateTime.Now.Date;

日付構造があり、オブジェクトは日付型として宣言できます。
カレブアンダーソン2016

@KalebAndersonは.NETのデフォルト実装にはありません。ありません。VB.netの日付について話している場合、それはまだDateTimeです。
ニック・N.

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

2

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


2

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

通常、日付は次の日時を持つDateTimeです。 00:00:00

DateTimeタイプ有する.Date返すプロパティDateTime上記のように設定された時間値とを。


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

        set 
        { 
            TheDate = value; 
        } 
    }    
}

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

0

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

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

ただし、BCLには「日付」タイプはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.