DateTime
変数 "s"の時間だけを変更するにはどうすればいいですか?
DateTime s = some datetime;
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
データベースエントリにリンクすることによって になります。
私の提案、ダイビング方法を使ってダイビングしてください。
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);
s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);
このようにしてあなたはあなたの好みに新しい時間、分、秒の一部を挿入しながらあなたの日付を保存します。
ワンライナー
var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));
今日の日付を4:30:00の時刻に戻します。DateTime.Nowを任意の日付オブジェクトに置き換えます。
DateTimeは不変の型なので、変更することはできません。
ただし、以前のインスタンスに基づいて新しいDateTimeインスタンスを作成できます。あなたの場合は、Dateプロパティが必要なように聞こえます。それから、時刻を表すTimeSpanを追加できます。
このようなもの:
var newDt = s.Date + TimeSpan.FromHours(2);
他の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
プロパティを使用するので、日付だけを取得してタイムスパンを追加します。
最も簡単な解決策:
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");
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
私はこれがおそらく男が望んでいたことをすることができる同じ機能を探していたので、この記事で起こった。元の日付を取り、時間部分を交換してください
DateTime dayOpen = DateTime.Parse(processDay.ToShortDateString() + " 05:00 AM");
実際、一度作成した時間を変更することはできません。しかし、あなたはそれを多くのコンストラクタで簡単に作成することができます: 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);
日付に.Dateを追加すると、真夜中(00:00)に設定されます。
MyDate.Date
注同値のSQLはCONVERT(DATETIME, CONVERT(DATE, @MyDate))
です。
この方法が非常に優れているのは、入力が簡単で読みやすいことです。ボーナスは、文字列からの変換がないということです。
すなわち今日の日付を23:30に設定するには、次のようにします。
DateTime.Now.Date.AddHours(23).AddMinutes(30)
もちろん、DateTime.NowまたはMyDateを任意の日付に置き換えることができます。
2014/02/05 18:19:51のようなDateTimeがあり、ちょうど2014/02/05が必要な場合は、次のようにします。
_yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day)
Date.Add
を使用して、追加したい新しい時刻とともにNew TimeSpan
を追加します
DateTime dt = DateTime.Now
dt.Date.Add(new TimeSpan(12,15,00))
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);
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);
これはあなたのためにそれをするのに使用できる方法です、このようにそれを使用して下さい
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
);
}
//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();
私はこの投稿に遭遇しました。ビューから日付を取得するMVCのEntity Frameworkオブジェクト(datepicker)の時間を設定する必要があるため、時間コンポーネントは00:00:00ですが、私は必要です。現在の時間になります。私が思い付いたこの記事の答えに基づいて:
myEntity.FromDate += DateTime.Now.TimeOfDay;
私はこれが好きです:
DateTime s = //get some datetime;
s = new DateTime(s.Year, s.Month,s.Day,s.Hour,s.Minute,0);
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
秒を加算または減算できるDateTime.AddSecondsメソッドの何が問題になっていますか?
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
が不変であり、そのメソッドが単に追加の時間/分/秒を追加して新しいインスタンスを作成するためです。
時間と分(および/または秒)と同じ時間を追加する必要がある場合は、代わりに元のTimeSpan
にDateTime
を追加することでコードを単純化できます。
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
それはあなたの問題を解決しないのですか?
Dateime dt = DateTime.Now;
dt = dt.AddSeconds(10);