web-dev-qa-db-ja.com

DateTimeの時間を変更するには?

DateTime変数 "s"の時間だけを変更するにはどうすればいいですか?

DateTime s = some datetime;
314
Santhosh

DateTime値を変更することはできません - それは不変です。ただし、新しい値を持つように変数を変更することはできます。時間を正確に変更する最も簡単な方法は、適切な時間でTimeSpanを作成し、DateTime.Dateプロパティを使用することです。

DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;

sは同じ日付になりますが、午前10時30分になります。

DateTimeは夏時間の移行を無視し、両方向の「単純な」グレゴリオ暦を表します( DateTime docs の備考を参照)。唯一の例外は.Now.Todayです。これらは、発生時にこれらのイベントを反映する現在のシステム時刻を取得します。

これが私が Noda Time プロジェクトを始めようと思ったきっかけになりました。そのZonedDateTime型は "認識" これをtzデータベースエントリにリンクすることによって になります。

532
Jon Skeet

私の提案、ダイビング方法を使ってダイビングしてください。

public static DateTime ChangeTime(this DateTime dateTime, int hours, int minutes, int seconds, int milliseconds)
{
    return new DateTime(
        dateTime.Year,
        dateTime.Month,
        dateTime.Day,
        hours,
        minutes,
        seconds,
        milliseconds,
        dateTime.Kind);
}

それから電話してください。

DateTime myDate = DateTime.Now.ChangeTime(10,10,10,0);

このエクステンションは 新しい 日付オブジェクトなので、これはできません。

DateTime myDate = DateTime.Now;
myDate.ChangeTime(10,10,10,0);

しかし、あなたはこれを行うことができます:

DateTime myDate = DateTime.Now;
myDate = myDate.ChangeTime(10,10,10,0);
89
joshcomley
s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);

このようにしてあなたはあなたの好みに新しい時間、分、秒の一部を挿入しながらあなたの日付を保存します。

61
Webleeuw

ワンライナー

var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));

今日の日付を4:30:00の時刻に戻します。DateTime.Nowを任意の日付オブジェクトに置き換えます。

27
Carl Woodhouse

DateTimeは不変の型なので、変更することはできません。

ただし、以前のインスタンスに基づいて新しいDateTimeインスタンスを作成できます。あなたの場合は、Dateプロパティが必要なように聞こえます。それから、時刻を表すTimeSpanを追加できます。

このようなもの:

var newDt = s.Date + TimeSpan.FromHours(2);
20
Mark Seemann

他のDateTimeオブジェクトに時間がすでに格納されている場合は、Addメソッドを使用できます。

DateTime dateToUse = DateTime.Now();
DateTime timeToUse = new DateTime(2012, 2, 4, 10, 15, 30); //10:15:30 AM

DateTime dateWithRightTime = dateToUse.Date.Add(timeToUse.TimeOfDay);

TimeOfDayプロパティはTimeSpanオブジェクトであり、Addメソッドに渡すことができます。そしてDate変数のdateToUseプロパティを使用するので、日付だけを取得してタイムスパンを追加します。

15
ShaneA

最も簡単な解決策:

DateTime s = //some Datetime that you want to change time for 8:36:44 ;
s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44);

特定の日付と時刻の形式が必要な場合は、

s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss");
11
Mr Rubix
DateTime ts = DateTime.Now;
ts = new DateTime ( ts.Year, ts.Month, ts.Day, 0, 0, 0 ) ;
Console.WriteLine ( "Today = " + ts.ToString("M/dd/yy HH:mm:ss") ) ;

実行日:今日= 9/04/15 00:00:00

8
philip

私はこれがおそらく男が望んでいたことをすることができる同じ機能を探していたので、この記事で起こった。元の日付を取り、時間部分を交換してください

DateTime dayOpen = DateTime.Parse(processDay.ToShortDateString() + " 05:00 AM");
8
BlackLarry

実際、一度作成した時間を変更することはできません。しかし、あなたはそれを多くのコンストラクタで簡単に作成することができます: https://docs.Microsoft.com/ja-jp/dotnet/api/system.datetime.-ctor?view=netframework-4.7。 2

たとえば、秒を変更するDateTimeを作成する場合は、次のようにします。

DateTime now = DateTime.Now;
DateTime secondschanged = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, yourseconds);
3
Francesc MP

日付に.Dateを追加すると、真夜中(00:00)に設定されます。

MyDate.Date

同値のSQLはCONVERT(DATETIME, CONVERT(DATE, @MyDate))です。

この方法が非常に優れているのは、入力が簡単で読みやすいことです。ボーナスは、文字列からの変換がないということです。

すなわち今日の日付を23:30に設定するには、次のようにします。

DateTime.Now.Date.AddHours(23).AddMinutes(30)

もちろん、DateTime.NowまたはMyDateを任意の日付に置き換えることができます。

3

2014/02/05 18:19:51のようなDateTimeがあり、ちょうど2014/02/05が必要な場合は、次のようにします。

_yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day)
3

Date.Addを使用して、追加したい新しい時刻とともにNew TimeSpanを追加します

DateTime dt = DateTime.Now
dt.Date.Add(new TimeSpan(12,15,00))
2

DateTimeは不変なので、日付コンポーネントを変更する必要があるときに新しいインスタンスを作成する必要があります。残念ながら、DateTimeインスタンスの個々のコンポーネントを設定するための組み込み機能はありません。

以下の拡張方法を使用する

public static DateTime SetPart(this DateTime dateTime, int? year, int? month, int? day, int? hour, int? minute, int? second)
{
    return new DateTime(
        year ?? dateTime.Year,
        month ?? dateTime.Month,
        day ?? dateTime.Day,
        hour ?? dateTime.Hour,
        minute ?? dateTime.Minute,
        second ?? dateTime.Second
    );
}

public static DateTime SetYear(this DateTime dateTime, int year)
{
    return dateTime.SetPart(year, null, null, null, null, null);
}

public static DateTime SetMonth(this DateTime dateTime, int month)
{
    return dateTime.SetPart(null, month, null, null, null, null);
}

public static DateTime SetDay(this DateTime dateTime, int day)
{
    return dateTime.SetPart(null, null, day, null, null, null);
}

public static DateTime SetHour(this DateTime dateTime, int hour)
{
    return dateTime.SetPart(null, null, null, hour, null, null);
}

public static DateTime SetMinute(this DateTime dateTime, int minute)
{
    return dateTime.SetPart(null, null, null, null, minute, null);
}

public static DateTime SetSecond(this DateTime dateTime, int second)
{
    return dateTime.SetPart(null, null, null, null, null, second);
}

次のように個々のDateTimeコンポーネントを設定できます。

var now = DateTime.Now;

now.SetSecond(0);
2
solidsparrow
int year = 2012;
int month = 12;
int day = 24;
int hour = 0;
int min = 0;
int second = 23;
DateTime dt = new DateTime(year, month, day, hour, min, second);
2
Sagar Rawal

これはあなたのためにそれをするのに使用できる方法です、このようにそれを使用して下さい

DateTime newDataTime = ChangeDateTimePart(oldDateTime, DateTimePart.Seconds, 0);

これがその方法です、おそらくもっと良い方法があります、しかし私はただこれをホイップアップしました:

public enum DateTimePart { Years, Months, Days, Hours, Minutes, Seconds };
public DateTime ChangeDateTimePart(DateTime dt, DateTimePart part, int newValue)
{
    return new DateTime(
        part == DateTimePart.Years ? newValue : dt.Year,
        part == DateTimePart.Months ? newValue : dt.Month,
        part == DateTimePart.Days ? newValue : dt.Day,
        part == DateTimePart.Hours ? newValue : dt.Hour,
        part == DateTimePart.Minutes ? newValue : dt.Minute,
        part == DateTimePart.Seconds ? newValue : dt.Second
        );
}
1
naspinski
//The fastest way to copy time            

DateTime justDate = new DateTime(2011, 1, 1); // 1/1/2011 12:00:00AM the date you will be adding time to, time ticks = 0
DateTime timeSource = new DateTime(1999, 2, 4, 10, 15, 30); // 2/4/1999 10:15:30AM - time tick = x

justDate = new DateTime(justDate.Date.Ticks + timeSource.TimeOfDay.Ticks);

Console.WriteLine(justDate); // 1/1/2011 10:15:30AM
Console.Read();
1
Pawel Cioch

私はこの投稿に遭遇しました。ビューから日付を取得するMVCのEntity Frameworkオブジェクト(datepicker)の時間を設定する必要があるため、時間コンポーネントは00:00:00ですが、私は必要です。現在の時間になります。私が思い付いたこの記事の答えに基づいて:

myEntity.FromDate += DateTime.Now.TimeOfDay;
1
Rob

私はこれが好きです:

DateTime s = //get some datetime;
s = new DateTime(s.Year, s.Month,s.Day,s.Hour,s.Minute,0);
0
andrew
 Using an extencion to DateTime:  

        public enum eTimeFragment
        {
            hours,
            minutes,
            seconds,
            milliseconds
        }
        public static DateTime ClearTimeFrom(this DateTime dateToClear, eTimeFragment etf)
        {
            DateTime dtRet = dateToClear;
            switch (etf)
            {
                case eTimeFragment.hours:
                    dtRet = dateToClear.Date;
                    break;
                case eTimeFragment.minutes:
                    dtRet = dateToClear.AddMinutes(dateToClear.Minute * -1);
                    dtRet = dtRet.ClearTimeFrom(eTimeFragment.seconds);
                    break;
                case eTimeFragment.seconds:
                    dtRet = dateToClear.AddSeconds(dateToClear.Second * -1);
                    dtRet = dtRet.ClearTimeFrom(eTimeFragment.milliseconds);
                    break;
                case eTimeFragment.milliseconds:
                    dtRet = dateToClear.AddMilliseconds(dateToClear.Millisecond * -1);
                    break;
            }
            return dtRet;

        }

このように使用してください:

Console.WriteLine(DateTime.Now.ClearTimeFrom(eTimeFragment.hours))

これは戻る必要があります:2016-06-06 00:00:00.000

0

秒を加算または減算できるDateTime.AddSecondsメソッドの何が問題になっていますか?

0
Chris Richner

DateTimeオブジェクトを構築するときは、時間を指定できるコンストラクタを使用してください。

var myDateTime = new DateTime(2000, 01, 01, 13, 37, 42);  // 2000-01-01 13:37:42

DateTimeオブジェクトをすでに持っていて時間を変更したい場合は、簡単な方法でDateTimeに分、時間、または秒を追加できます。

var myDateTime = new DateTime(2000, 01, 01);              // 2000-01-01 00:00:00
myDateTime = myDateTime.AddHours(13);                     // 2000-01-01 13:00:00
myDateTime = myDateTime.AddMinutes(37);                   // 2000-01-01 13:37:00
myDateTime = myDateTime.AddSecounds(42);                  // 2000-01-01 13:37:42

myDateTime変数への各メソッド呼び出しからの結果をどのように「保存」しなければならないかに注意してください。これはDateTimeが不変であり、そのメソッドが単に追加の時間/分/秒を追加して新しいインスタンスを作成するためです。

時間と分(および/または秒)と同じ時間を追加する必要がある場合は、代わりに元のTimeSpanDateTimeを追加することでコードを単純化できます。

var myDateTime = new DateTime(2000, 01, 01);              // 2000-01-01 00:00:00
myDateTime += new TimeSpan(13, 37, 42);                   // 2000-01-01 13:37:42

既存の値に追加するのではなく、絶対時間/分/秒を設定したい場合は、前述のDateTimeコンストラクターを使用して、年月日の値を以前のものから再利用できます。

myDateTime = new DateTime(myDateTime.Year, myDateTime.Month, myDateTime.Day,
                          20, 33, 19)                     // 2000-01-01 20:33:19
0

それはあなたの問題を解決しないのですか?

Dateime dt = DateTime.Now;
dt = dt.AddSeconds(10);
0
Naveed Butt