DateTimeオブジェクトのみでC#の日付の時刻部分を削除する方法は?


458

日付時刻の時刻部分を削除する必要があるか、おそらくの形式でobjectはなく、次の形式の日付が必要ですstring

06/26/2009 00:00:00:000

string日付をobjectフォームに入力する必要があるため、変換方法を使用できません。

私は最初にをに変換してみDateTimeましたがstring、時刻から特定の日付を削除しましたが、再度12:00:00 AM変換するとすぐに追加されDateTime objectます。


10
C#には日付のみのクラス/構造はありません。必要な場合は、独自のクラス/構造を追加する必要があります。
oleschri 2011年

12
DateTime.Now.ToShortDateString()を使用するだけ
Mohammad Shahnawaz Alam

@ShahnawazAalamまだ文字列だと思いますが、datetimeにも問題がありました。日時変数からの日付のみが必要

選択肢を説明するこの回答も参照してください。
Matt Johnson-Pint 2017年

var dateTime = DateTime.Now.Date;
PrathapG 2018年

回答:


826

Dateプロパティを使用します。

var dateAndTime = DateTime.Now;
var date = dateAndTime.Date;

date変数は日付が含まれます、時間の一部になります00:00:00


36
質問者が述べたように、時間の部分は午前12:00:00ではないでしょうか。
ファイアパンダ

13
時間の部分はゼロ(真夜中)です。これがAM / PM形式を使用して文字列としてフォーマットされている場合、これは午前12時と表されます。
driis

98
これは質問の答えにはなりません。答えが示唆するように、DateTime.Date(それ自体がDateTimeです!)には、デフォルトで00:00:00の時間部分があります。質問者は次のようになります。DateTimeではできません。独自の構造を構築するか、野田時間を見てください。
Tomas Vinter 2012

23
@TomasVinterは正しいです。.NETフレームワークには「厳密に日付」の構造はありません。自分で作成する必要があります。ただし、DateTimeは.ToShortDateTime()メソッドを公開します。これは、値の日付部分のみを表す文字列をフォーマットし、現在のカルチャ(Thread.Current.CurrentCulture)で構成されたDateFormatを使用して日付をフォーマットするため、MM-dd -yyyy(米国)、dd-MMM-yyyy(EU)など
マイケルJ.ハイアー

16
これは正解ではないと言っている人へ:正解ですが、質問は間違っています。それは質問者の主題に対する無知を表示します。オブジェクト形式での日付の形式はありません。形式は、文字列に変換されたときにのみ意味があります。彼のオブジェクトに実際に格納されているのはではなく06/26/2009 00:00:00.000、です63381571200000000。これは、DateTime.MinValue(01/01/0001)以降のティックの数(1/100000000秒)です。日付を表示する場合は、それを文字列に変換します。それ以外の場合は、時刻コンポーネントは午前0時です。それに対処します。
CptRobby、2015

165

書式文字列を使用して、出力文字列に好みの書式を設定できます。

DateTime dateAndTime = DateTime.Now;
Console.WriteLine(dateAndTime.ToString("dd/MM/yyyy")); // Will give you smth like 25/05/2011

カスタムの日付と時刻の形式の文字列の詳細をご覧ください。


48
DateAndTime.ToShortDateString();
John Peters

私はこれが必要でしたが、以前CultureInfo.DateTimeFormat.ShortDatePatternはユーザーフレンドリー
でした

これにより、この形式を使用しないロケールでは正しくない出力が行われます。ロケールを認識するToShortDateStringを使用する方がよい
Matt Wilko

1
dd/MM/yyyyこれを使用する前に、フォーマットを必要なものに更新してください。
slayernoah

.ToString()希望する形式で、私が本当に必要なものです、ありがとう!
Willem Ellis

108

メソッドToShortDateStringを使用します。ドキュメントを参照してくださいhttp://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx

var dateTimeNow = DateTime.Now; // Return 00/00/0000 00:00:00
var dateOnlyString = dateTimeNow.ToShortDateString(); //Return 00/00/0000

2
ToShortDateString実装していませんIFormatProvider:/
Muflix

私の場合、00/00/0000ではなく00.00.0000を返しました
bside

39

DateTime.Dateプロパティを見てください。

このインスタンスの日付コンポーネントを取得します。


20
あなたはもっと説明する必要があります、これは答えではありませんこれはリンクです
マラキ

27
@Malachi:ハイパーリンクが理解できない場合に備えて、リンクされた公式APIの最初の行をコピーして貼り付けました。
Nick

var dateTime = DateTime.Now.Date;
PrathapG 2018年

29

Dateプロパティは、深夜に日付を返します。

1つのオプションは、個別の値(日/月/年)を個別に取得し、それを必要なタイプに格納することです。

var dateAndTime = DateTime.Now; 
int year = dateAndTime.Year;
int month = dateAndTime.Month;
int day = dateAndTime.Day;

string.Format("{0}/{1}/{2}", month, day, year);

20

上記の回答のいずれも、winformsに関する私の問題を解決しませんでした。

日付のみに到達する最も簡単な方法は、Datetimeの単純な関数です。

DateTime dt = DateTime.now;
String BirthDate = dt.ToShortDateString();

誕生日文字列には日付のみが含まれます。


4
なぜ(string)キャストがあるのですか?によって返されるタイプは、ToShortDateString実際には文字列です。
Askolein

15

そのために独自の構造を作成してみてください。DateTimeオブジェクトには日付と時刻の両方が含まれます


3
これが答えになるはずです。それは実際の質問に対する唯一の答えであるように見えます-オブジェクトから時間を削除することはできません。自分で転がしたり、真夜中(または時刻)で生活したり、必要なもののToString表現を操作したりできます。
Phil Cooper

これは最も正しい答えかもしれませんが、自分自身で非常にうまく回転するホイールを再発明するのが好きな、生命のない人々を除くすべてにとって完全に学術的です。DateTime構造体で追加の長いプロパティを格納するために使用される追加のメモリについて本当に心配している場合は、単にそれを無視するよりも大きな問題があります。
iGanja 2015

答えてくれてありがとう。構造を作成しなくても、ほとんどの場合、ユーザーは文字列変数を使用できます。どう思いますか?
Kushan Randima

@KushanRandima、これはほとんどの場合に当てはまります。しかし、質問ではユーザーは文字列形式を望んでいないため、これを代替手段の1つとして提案しました。
Umesh CHILAKA

15

できません。.NETのDateTimeには常に時刻があり、デフォルトは00:00:00:000です。DateTimeのDateプロパティもDateTime(!)であるため、デフォルトの時刻も00:00:00:000になります。

これは.NET Frameworkの不足であり、.NETのDateTimeは単一責任の原則に違反していると主張できます。


これがこの質問の正解です。DateTimeオブジェクトには常にTimeがあります。
Drkawashima 2013

1
興味がないのに、なぜこれをSRPの違反と見なすのですか?責任が特定の時点を表すものであり、クラスが基になるTicksプロパティを公開している場合、Year / Hour / Millisecondプロパティは(主流の)規則を処理するためだけに存在します。
ロブ教会

日付と時刻は2つの異なる概念であるため、残念ながら、同じ構造にバンドルされた.NET Frameworkでは。したがって、構造には複数の責任(日付と時刻の両方の処理)があるため、SRPに違反します。.NETのDateTimeは、特定の時点を表すだけでなく、他の多くのものも表します。したがって、特定の時点のみを表す責任を考えるのは奇妙です。
Tomas Vinter 2013

2
ある時点は、日付と時刻の両方で表されます。誰かに午後1時に会うように言うと、その人は何曜日か知っていると思い込んでしまいます。今日がその日であるとしても、正確さは明確に述べられることを要求します。任意の精度で特定の時点を表す単一の値をエルゴで指定するには、参照開始点を使用して日付と時刻の両方を含める必要があります。したがって、開始参照からの日付と開始参照からの時間は、明らかに同じ概念です。追加の精度を追加する時間。
iGanja 2015

1
複数のインスタンスについて話しているときは、時間のみが役立ちます。たとえば、毎日UTCの真夜中です。毎月1日の現地時間正午 間違いなく、TimeSpanを使用して慣例でそれを表すことができますが、24時間以内の時間とタイムゾーン内のポイントを表すTimeオブジェクトを用意する方がわかりやすいかもしれません。最終的に、DateTimeがカプセル化するアイデアは、Date、Time、およびTimeZoneの3つです。
David Beckman

12

DateTime.Date

var newDate = DateTime.Now; //newDate.Date property is date portion of DateTime

9
あなたはもっと説明する必要があります。これは答えではなく、リンクです
マラキ

2
var newDate = DateTime.Now; //newDate.Dateプロパティは、DateTimeの日付部分です。何が不明確ですか?不明確な場合-リンクをたどってください。
VikciaR 2014

10

ここにあるもう一つの方法は、使用してString.Format

    DateTime todaysDate = DateTime.UtcNow;

    string dateString = String.Format("{0:dd/MM/yyyy}", todaysDate);

    Console.WriteLine("Date with Time: "+ todaysDate.ToString());

    Console.WriteLine("Date Only : " + dateString);

出力:

Date with Time: 9/4/2016 11:42:16 AM

Date Only : 04/09/2016

これは、日時がデータベースに保存されている場合にも機能します。

その他の日付と時刻のフォーマットについては、次のリンクを確認してください。

リファレンス1

リファレンス2

願っています。


OPには、「オブジェクト形式の日付が必要なため、文字列変換メソッドを使用できない」と明記されています。
ChrisF

7

時間のない日付のみを取得するこの方法

DateTime date = DateTime.Now;
string Strdateonly = date.ToString("d");

出力= 2015年5月16日


1
他の回答と明らかに異なる場合にのみ、遅い回答は追加する価値があります(他のユーザーの観点からは賛成票を投じてください)。ここではそうではありません。
m.cekiera

5

DateOnly構造を書いた。これはスキンの下でDateTimeを使用しますが、時間部分は公開されていません。

using System;

public struct DateOnly : IComparable, IFormattable, IComparable<DateOnly>, IEquatable<DateOnly>
{

    private DateTime _dateValue;

    public int CompareTo(object obj)
    {
        if (obj == null)
        {
            return 1;
        }

        DateOnly otherDateOnly = (DateOnly)obj;
        if (otherDateOnly != null)
        {
            return ToDateTime().CompareTo(otherDateOnly.ToDateTime());
        }
        else
        {
            throw new ArgumentException("Object is not a DateOnly");
        }
    }

    int IComparable<DateOnly>.CompareTo(DateOnly other)
    {
        return this.CompareToOfT(other);
    }
    public int CompareToOfT(DateOnly other)
    {
        // If other is not a valid object reference, this instance is greater.
        if (other == new DateOnly())
        {
            return 1;
        }
        return this.ToDateTime().CompareTo(other.ToDateTime());
    }

    bool IEquatable<DateOnly>.Equals(DateOnly other)
    {
        return this.EqualsOfT(other);
    }
    public bool EqualsOfT(DateOnly other)
    {
        if (other == new DateOnly())
        {
            return false;
        }

        if (this.Year == other.Year && this.Month == other.Month && this.Day == other.Day)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public static DateOnly Now()
    {
        return new DateOnly(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
    }

    public static bool TryParse(string s, ref DateOnly result)
    {
        DateTime dateValue = default(DateTime);
        if (DateTime.TryParse(s, out dateValue))
        {
            result = new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
            return true;
        }
        else
        {
            return false;
        }
    }

    public static DateOnly Parse(string s)
    {
        DateTime dateValue = default(DateTime);
        dateValue = DateTime.Parse(s);
        return new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
    }

    public static DateOnly ParseExact(string s, string format)
    {
        CultureInfo provider = CultureInfo.InvariantCulture;
        DateTime dateValue = default(DateTime);
        dateValue = DateTime.ParseExact(s, format, provider);
        return new DateOnly(dateValue.Year, dateValue.Month, dateValue.Day);
    }

    public DateOnly(int yearValue, int monthValue, int dayValue) : this()
    {
        Year = yearValue;
        Month = monthValue;
        Day = dayValue;
    }

    public DateOnly AddDays(double value)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddDays(value);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DateOnly AddMonths(int months)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddMonths(months);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DateOnly AddYears(int years)
    {
        DateTime d = new DateTime(this.Year, this.Month, this.Day);
        d = d.AddYears(years);
        return new DateOnly(d.Year, d.Month, d.Day);
    }

    public DayOfWeek DayOfWeek
    {
        get
        {
            return _dateValue.DayOfWeek;
        }
    }

    public DateTime ToDateTime()
    {
        return _dateValue;
    }

    public int Year
    {
        get
        {
            return _dateValue.Year;
        }
        set
        {
            _dateValue = new DateTime(value, Month, Day);
        }
    }

    public int Month
    {
        get
        {
            return _dateValue.Month;
        }
        set
        {
            _dateValue = new DateTime(Year, value, Day);
        }
    }

    public int Day
    {
        get
        {
            return _dateValue.Day;
        }
        set
        {
            _dateValue = new DateTime(Year, Month, value);
        }
    }

    public static bool operator == (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() == aDateOnly2.ToDateTime());
    }

    public static bool operator != (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() != aDateOnly2.ToDateTime());
    }

    public static bool operator > (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() > aDateOnly2.ToDateTime());
    }

    public static bool operator < (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() < aDateOnly2.ToDateTime());
    }

    public static bool operator >= (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() >= aDateOnly2.ToDateTime());
    }

    public static bool operator <= (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() <= aDateOnly2.ToDateTime());
    }

    public static TimeSpan operator - (DateOnly aDateOnly1, DateOnly aDateOnly2)
    {
        return (aDateOnly1.ToDateTime() - aDateOnly2.ToDateTime());
    }


    public override string ToString()
    {
        return _dateValue.ToShortDateString();
    }

    public string ToString(string format)
    {
        return _dateValue.ToString(format);
    }

    public string ToString(string fmt, IFormatProvider provider)
    {
        return string.Format("{0:" + fmt + "}", _dateValue);
    }

    public string ToShortDateString()
    {
        return _dateValue.ToShortDateString();
    }

    public string ToDbFormat()
    {
        return string.Format("{0:yyyy-MM-dd}", _dateValue);
    }
}

これはVB.NETから変換されるため、一部の変換が100%でない場合はお詫びします


5

date.ToShortDateString()を使用して、時間コンポーネントなしで日付を取得します

var date = DateTime.Now
var shortDate = date.ToShortDateString() //will give you 16/01/2019

日付の形式をカスタマイズするには、date.ToString()を使用します

var date = DateTime.Now
var shortDate = date.ToString('dd-MMM-yyyy') //will give you 16-Jan-2019

4

誰もDateTime.Todayについて言及していないことに驚いています。

var date = DateTime.Today;
// {7/1/2014 12:00:00 AM}

MSDNを参照してください


+1は、答えが正しいプロパティの日付を生成するためだけですが、OPは新しい日付を作成するのではなく、既存の日付から時間を削除したいと考えています。
iGanja 2015

3

日時からの唯一の日付でこれを試すことができます

String.Format("{0:d/M/YYYY}",dt);

ここで、dtは DateTime


3

元のQを解こうとすると、この投稿に出くわしました。

私はAsp.Netを使用しており、コードビハインドで日付の値にバインドしているときに見つけたいくつかの調査の後、画面に表示されないように時間をドロップできます。

C#:

DateTime Today = DateTime.Now;

aspx:

<%: this.Today.ToShortDateString() %>


3

文字列に変換する場合は、次のように簡単に実行できます。

DateTimeオブジェクトとして日付を使用しています。

date.ToString("d");

これは日付のみを提供します。


2
string dt = myCalender.SelectedDate.ToString();
string date = dt.Remove(10);
displayDate.Content = date;

カレンダーから日付をとれば、これで時間も取れます。常に必要なわけではありません。これを使用して、日付から時間を削除できます。


2

私の経験では、データベースから抽出された日付から時間を削除したかったので、上記の解決策はどれも機能しませんでしたが、以下のコードはうまくいきました:

var date = target_date.Value.ToString("dd/MM/yyyy"); 

質問では、日付は文字列ではなくオブジェクトである必要があると明確に述べられていました。このソリューションは文字列を返します。
ソース

2

変数を文字列として宣言します。

例:

public string dateOfBirth ;

次に、次のような値を割り当てます。

dateOfBirth = ((DateTime)(datetimevaluefromDB)).ToShortDateString();

人々は質問を読み、構造体(スタック上の)をオブジェクト(ヒープ上の)に理由なく変換するのをやめるべきです。
iGanja 2015

2

私はこれが多くの答えを持つ古い投稿であることを知っていますが、時間部分を削除するこの方法を見たことはありません。とDateTime呼ばれる変数myDateがあり、日付と時刻の部分が含まれているとします。DateTimeこのコンストラクタを使用して、時間部分なしで、そこから新しいオブジェクトを作成できます。

public DateTime(int year, int month, int day);

このような:

myDate = new DateTime(myDate.Year, myDate.Month, myDate.Day);

このようDateTimeにして、古いオブジェクトに基づいて、時間部分として00:00:00を持つ新しいオブジェクトを作成します。


2

必要なプロパティのみを保持する構造体を作成します。次に、DateTimeのインスタンスからその構造体を簡単に取得するための拡張メソッド。

public struct DateOnly
{
    public int Day { get; set; }
    public int Month { get; set; }
    public int Year { get; set; }
}

public static class DateOnlyExtensions
{
    public static DateOnly GetDateOnly(this DateTime dt)
    {
        return new DateOnly
        {
            Day = dt.Day,
            Month = dt.Month,
            Year = dt.Year
        };
    }
}

使用法

DateTime dt = DateTime.Now;
DateOnly result = dt.GetDateOnly();

2

日付部分のみを取得するには、ToString()メソッドを使用します。

例:DateTime.Now.Date.ToString( "dd / MM / yyyy")

注:dd / MM / yyyy形式のmmは大文字にする必要があります


1

DateTimeオブジェクトの.Dateを使用すると、時間部分は無視されます。

ここにコードがあります:

DateTime dateA = DateTime.Now;
DateTime dateB = DateTime.Now.AddHours(1).AddMinutes(10).AddSeconds(14);
Console.WriteLine("Date A: {0}",dateA.ToString("o"));
Console.WriteLine("Date B: {0}", dateB.ToString("o"));
Console.WriteLine(String.Format("Comparing objects A==B? {0}", dateA.Equals(dateB)));
Console.WriteLine(String.Format("Comparing ONLY Date property A==B? {0}", dateA.Date.Equals(dateB.Date)));
Console.ReadLine();

出力:

>Date A: 2014-09-04T07:53:14.6404013+02:00
>Date B: 2014-09-04T09:03:28.6414014+02:00
>Comparing objects A==B? False
>Comparing ONLY Date property A==B? True

1

RegExを少し使用します。

Regex.Match(Date.Now.ToString(), @"^.*?(?= )");

日付をdd / mm / yyyyの形式で生成します


1

データリストで使用する場合、asperページのリピーター。<%#Eval( "YourDateString")。ToString()。Remove(10)%>


1
static void Main(string[] args)
{
    string dateStrings =  "2014-09-01T03:00:00+00:00" ;

    DateTime convertedDate = DateTime.Parse(dateStrings);
    Console.WriteLine("  {0} ----------------- {1}",

    convertedDate,DateTime.Parse(convertedDate.ToString()).ToString("dd/MM/yyyy"));

    Console.Read();
}

1

これは次のように簡単に行うことができます:

var dateOnly = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day)

1

このコードは、書き込みDateだけでなくTime個別に明確なビューを提供します

string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00");
        string date = DateTime.Now.ToString("M-dd-yyyy");
        MessageBox.Show(date + "\n" + time);

お役に立てれば。

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