web-dev-qa-db-ja.com

DateTimeオブジェクトのhours:seconds:millisecondsを削除します

_mm:dd:yyyy_という形式のDateTimeオブジェクトから文字列を作成しようとしています。

通常、DateTimeオブジェクトは_mm:dd:yyyy hrs:min:sec AM/PM_として提供されます。

DateTimeの_hrs:min:sec AM/PM_部分をすばやく削除して、変換時にToString()が_mm:dd:yyyy_のみになるようにする方法はありますか?

14
locoboy

質問に答えるには、いいえ-別のタイプで保存する必要があります。最も簡単な選択は、文字列を使用することです。

string date = dateTime.ToString("MM:dd:yyyy");

ただし、日付をプログラム内で文字列として保存しないことも強くお勧めします。これにより、それらの計算や比較が困難になります。さらに、特定のカルチャを日付表現に強制しないことをお勧めします。これは、アプリケーションがおそらく他のカルチャでは期待どおりに機能しないことを意味します。

もう少し洗練されたアプローチは、ToStringをオーバーライドするカスタムクラスを作成することです。ただし、標準ライブラリ関数でタイプを使用することは依然として難しいため、これも回避します。あなたは常に前後に変換する必要があります。

DateTimeのままにして、プレゼンテーションレイヤーでのみ文字列への変換を行います。 DateTime.ToShortDateStringを使用して、ユーザーフレンドリーなカルチャ対応文字列を印刷できます。

12
Mark Byers
datetime DateWithTimeNoSeconds = 
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);

現在の日付と時刻の日付を取得し、時間と分を追加します。

10
Dave
DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0);
Console.WriteLine(date1.ToString());

// Get date-only portion of date, without its time.
DateTime dateOnly = date1.Date;
// Display date using short date string.
Console.WriteLine(dateOnly.ToString("d"));
// Display date using 24-hour clock.
Console.WriteLine(dateOnly.ToString("g"));
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm"));   
// The example displays the following output to the console:
//       6/1/2008 7:47:00 AM
//       6/1/2008
//       6/1/2008 12:00 AM
//       06/01/2008 00:00

http://msdn.Microsoft.com/en-us/library/system.datetime.date.aspx

8
Gopi

通常、私は DateTime.ToShortDateString() を使用してCulture対応の方法で文字列に変換します。

このようにして、現在のスレッドに設定されているカルチャの現在のフォーマットのみを考慮して、日付をフォーマットできます。

7
Uwe Keim

ほとんどの場合、私はMark Byersに同意しますが、1時間単位の細かい日付時刻を保存する必要がある状況がありました。分と秒を保存することは不必要なだけでなく、不正確になります。ユーザーは日付と時間を選択するだけなので、日付と時間はユーザーが選択しますが、分と秒は現在の時刻に設定されます。

この場合、分と秒の削除は非常に簡単です。これがコードです:

scheduledDate = scheduledDate.AddMinutes(
    scheduledDate.Minute * -1).AddSeconds(
    scheduledDate.Second * -1);

次に、完全な日付時刻としてDBに保存します。分と秒は常に0です。

7
user2113657

文字列に変換せずにDateTimeオブジェクトから時間、秒、ミリ秒(0にリセットとして削除)を削除する場合は、Dateプロパティを使用できます。

// Get date-only portion of date, without its time.
var date = DateTime.Now.Date;

以下の例では、Dateプロパティを使用して、DateTime値の日付コンポーネントを抽出し、その時間コンポーネントをゼロ(または0:00:00、または真夜中)に設定しています。

msdn

4
aloisdg

DateTime.AddMinutes(または秒または時間)を追加するのではなく削除する場合は、負の数を追加するだけです!

2
lunarnet76

簡単な方法、おそらく最善ではありませんが

DateTime dt = new DateTime();
dt = DateTime.Now;
string sdate = dt.ToShortDateString();
dt = DateTime.Parse(sdate);

または略して

var dt = DateTime.Parse(DateTime.Now.ToShortDateString());
1
Riaan Hayes

秒のない日付と時刻の場合、このようなもの:

private DateTime _startTime;
public DateTime StartTime 
{ 
    get { return _startTime; } 
    set 
    { 
        _startTime = value.AddSeconds(-value.Second)
                          .AddMilliseconds(-value.Millisecond);   
    }
}
0
khablander