回答
您不能更改DateTime值 - 它是不可变的。但是,您可以将该变量更改为具有新值。这样做,要改变只是时间的最简单的方法是创建相关的时间时间跨度,并使用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
类型被制成“知道”by linking it to a tz
database entry。
DateTime.AddSeconds方法在哪里可以添加或减少秒?
不仅如此,但它听起来并不像它回答了这个问题呢。我怀疑OP想要一个DateTime与日期相同但具体的时间 - 这只会使用AddSeconds *相对*很难做到。 – 2009-12-07 10:54:27
s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);
通过这种方式,您可以保留日期,同时插入新的小时,分钟和秒钟部分以满足自己的喜好。
@Webleeuw当然,根据添加的值,[ArgumentOutOfRangeException](http://msdn.microsoft.com/en-us/library/system.argumentoutofrangeexception.aspx)的远程可能性。这是一个[Pex](http://pexforfun.com/default.aspx?language=CSharp&sample=Y2k)益智演示。 – lifebalance 2013-10-31 16:03:14
并根据用例,如果需要也可以执行'.AddMilliseconds()'。 – 2017-04-21 16:15:47
DateTime是不可变的类型,所以你不能更改它。
但是,您可以根据以前的实例创建新的DateTime实例。就你而言,这听起来像你需要Date属性,然后你可以添加一个TimeSpan来表示一天的时间。
事情是这样的:
var newDt = s.Date + TimeSpan.FromHours(2);
DateTime s;
//s = datevalue
s = s.AddMilliseconds(10);
s = s.AddMinutes(10);
s = s.AddSeconds(10);
s = s.AddHours(10);
您可以添加+参数VE/-ve值。
s.Add(new TimeSpan(1, 1, 1));
当你构建你的DateTime
对象,使用一个构造函数允许你指定时间:
var myDateTime = new DateTime(2000, 01, 01, 13, 37, 42); // 2000-01-01 13:37:42
如果你已经有了一个DateTime
对象,并希望改变的时候,uou可以加分,小时秒到你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
通知我们如何“拯救”从每个方法C的结果全部转到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
如果你想设置绝对小时/ MINUES /秒,而不是添加到现有的值,可以使用上述DateTime
构造和重用值年/月/日从早期:
myDateTime = new DateTime(myDateTime.Year, myDateTime.Month, myDateTime.Day,
20, 33, 19) // 2000-01-01 20:33:19
使用AddXXX方法进行加减运算 – 2009-12-07 10:53:44
这里是一个贫民区的方式,但这行得通s :)
DateTime dt = DateTime.Now; //get a DateTime variable for the example
string newSecondsValue = "00";
dt = Convert.ToDateTime(dt.ToString("MM/dd/yyyy hh:mm:" + newSecondsValue));
这不能解决您的问题吗?
Dateime dt = DateTime.Now;
dt = dt.AddSeconds(10);
好吧,我潜水与我的建议,一个扩展方法:
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);
这与'Datetime.Today.Add(time.TimeOfDay)'基本相同。这是因为在内部,构造函数不会执行任何基于日历的更正,除非计算日期部分的闰年。即DateTime是Python的'datetime'模块的一个“天真”实现。 – 2014-10-08 11:54:24
这里是你可以用它来为你做它,使用它像这样
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
);
}
我刚才碰到过这个职位,因为我也有过类似的问题,即我想设置的时间为实体框架对象MVC从视图(日期选择器)获取日期,所以时间组件是00:00:00,但我需要它是当前时间。基于这一职位的答案,我想出了:
myEntity.FromDate += DateTime.Now.TimeOfDay;
偶然发现这个职位,因为我一直在寻找相同的功能,这可能可能做的家伙想要什么。以原始日期和更换时间部分
DateTime dayOpen = DateTime.Parse(processDay.ToShortDateString() + " 05:00 AM");
//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();
一个衬垫
var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));
会带回今天的日期用的4点三十分00秒时,任何日期代替DateTime.Now对象
如果已将时间存储在另一个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
方法。由于我们使用dateToUse
变量的Date
属性,我们只获取日期并添加时间跨度。
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);
最好的解决办法是:
currdate.AddMilliseconds(currdate.Millisecond * -1).AddSeconds(currdate.Second * -1).AddMinutes(currdate.Minute * -1).AddHours(currdate.Hour * -1);
我更喜欢这样的:
DateTime s = //get some datetime;
s = new DateTime(s.Year, s.Month,s.Day,s.Hour,s.Minute,0);
如果你有一个像2014年2月5日18点19分51秒日期时间和只想2014/02/05,你可以这样做:
_yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day)
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
将.Date添加到您的日期,将其设置为午夜(00:00)。
MyDate.Date
注意的equivavalent SQL是CONVERT(DATETIME, CONVERT(DATE, @MyDate))
是什么让这个方法好是它的两个快速输入,易于阅读。奖金是没有从字符串转换。
I.e.要设置今天的日期至23:30,使用方法:
DateTime.Now.Date.AddHours(23).AddMinutes(30)
当然,你可以用任何你选择的日期更换DateTime.Now或指明MyDate。
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年6月6日00:00:00.000
由于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);
使用Date.Add
并添加一个New TimeSpan
与您要添加
DateTime dt = DateTime.Now
dt.Date.Add(new TimeSpan(12,15,00))
最简单的解决方案:
DateTime s = new DateTime(datetime.Year, datetime.Month, datetime.Day, 8, 36, 44);
如果你需要一个特定的日期和时间格式:
DateTime s = new DateTime(datetime.Year, datetime.Month, datetime.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss")
试试这个
var NewDate = Convert.ToDateTime(DateTime.Now.ToString("dd/MMM/yyyy")+" "+"10:15 PM")/*Add your time here*/;
- 1. 如何更改DateTime变量的时间?
- 2. 如何更改SQLite时间格式datetime
- 3. 如何更改Ruby中DateTime的时区?
- 4. 如何更改RDLC中DateTime的时间格式?
- 5. 如何在时区更改时向DateTime添加时间?
- 6. 如何更改DateTime?
- 7. 更改Joda DateTime时区但不更改时间
- 8. 在mysql中datetime的更新时间
- 9. 如何删除DateTime中的时间
- 10. 使用datetime更改python中的时间格式
- 11. MySQL - 在datetime中更改时间的函数
- 12. 如何更改.php中的时间
- 13. 如何使用XAML和C更新DateTime中的时间#
- 14. 如何更改时间值
- 15. 如何更改UTC时间
- 16. 在DataFactory活动中将DateTime更改为Unix时间戳
- 17. 如何更改夏令时的时间
- 18. 如何更改DateTime/GetLastWriteTime的格式?
- 19. 如何从dateTime中删除时间kunena1.7
- 20. 如何更改/更新NSTimer中的时间间隔?
- 21. 如何更改perfmon时间轴间隔
- 22. 如何从laravel的datetime获得时间?
- 23. 如何更改android定时器时间?
- 24. DateTime格式文化 - 如何更改它?
- 25. 如何更改CSS的时间变换
- 26. 如何更改webClient.UploadData()的时间限制?
- 27. 如何更改sqlite的时间格式?
- 28. 如何找出window.location更改的时间
- 29. 如何更改NSTimer的时间?
- 30. 表如何使显示其更改时间时间r中
s.Date.Add(新的TimeSpan(0,0,0))也应该有效。在两天之间进行检查时使用它来清空时间。 – 2012-03-14 13:49:37
@ user295734:你为什么要调用'Add'提供零时间跨度?你的表情等同于's.Date',但是更长... – 2012-03-14 14:21:23
忘记纠正它,在我把它放入代码之后意识到它设置为零(我最初搜索的是)。但我只是试图展示如何在一行中设置时间,如果不设置为0. – 2012-03-14 14:44:32