[英]Why DateTime.AddHours doesn't seem to work?
I have same result 1338161400 when I do当我这样做时,我有相同的结果 1338161400
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime date = DateTime.Parse(@"28/05/12 01:30");
TimeSpan diff = date.ToUniversalTime() - origin;
Console.WriteLine( (Math.Floor(diff.TotalSeconds)).ToString());
as well as when I use date.AddHours(-4) :以及当我使用 date.AddHours(-4) 时:
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime date = DateTime.Parse(@"28/05/12 01:30");
date.AddHours(-4);
TimeSpan diff = date.ToUniversalTime() - origin;
Console.WriteLine( (Math.Floor(diff.TotalSeconds)).ToString());
I try to get 1338168600 like http://www.mbari.org/staff/rich/utccalc.htm我尝试像http://www.mbari.org/staff/rich/utccalc.htm一样获得 1338168600
Update:更新:
Thanks I changed to谢谢我改成
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime date = DateTime.Parse(@"28/05/2012 01:30");
date = date.AddHours(-4);
date = date.ToUniversalTime();
TimeSpan diff = date - origin;
Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString());
But I got 1338147000 still not 1338168600但我得到 1338147000 仍然不是 1338168600
Dates are immutable objects, ie they cannot be modified after creation. 日期是不可变对象,即它们在创建后无法修改。 DateTime.AddHours returns a new DateTime instance which is shifted backwards by 4 hours but "date" will not be modified.
DateTime.AddHours返回一个新的DateTime实例,该实例向后移动4小时但不会修改“date”。
Use: 使用:
DateTime newDate = date.AddHours(-4);
AddHours
returns a new DateTime
object which is the result of adding the hours onto the original. AddHours
返回一个新的 DateTime
对象,它是将小时数添加到原始对象的结果。 The original is left unchanged. 原件保持不变。
Thus you want date = date.AddHours(-4);
因此你想要
date = date.AddHours(-4);
instead of just date.AddHours(-4);
而不仅仅是
date.AddHours(-4);
The original date is set 4 hours backward but you didn't set it to new date. 原始日期设置为向后4小时,但您没有将其设置为新日期。 try this instead:
试试这个:
date = date.AddHours(-4);
AddHours
只返回新的递增日期,使用:
date = date.AddHours(-4);
DateTime is not immutable. DateTime不是不可变的。 It's just that the DateTime methods don't change the struct, but instead return a new one.
只是DateTime方法不会更改结构,而是返回一个新结构。
If you do this: 如果你这样做:
DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now;
d1 = d2;
Then, the struct d1 will be overwritten with d2's values. 然后,结构d1将被d2的值覆盖。
I don't know if it's possible to have an immutable struct. 我不知道是否有可能有一个不可变的结构。
Try if this works: 尝试这是否有效:
System.DateTime today = System.DateTime.Now;
System.TimeSpan duration = new System.TimeSpan(0, 11, 0, 0);
System.DateTime answer = today.Add(duration);
System.Console.WriteLine("{0:dddd}", answer);
This seems to change the day in the date also on adding hours. 这似乎也改变了日期的日期也增加了几个小时。
This is my solution:这是我的解决方案:
private DateTime SetTime(DateTime datetime, string span="max")
{
var hour = datetime.Hour;
var min = datetime.Minute;
var sec = datetime.Second;
if (span == "min")
datetime = datetime.Add(new TimeSpan(-hour, -min, -sec));
else
datetime = datetime.Add(new TimeSpan(23-hour, 59-min, 59-sec));
return datetime;
}
public DateTime GetDateTimes()
{
var start = "1/1/2022";
var end = "31/3/2022";
var cultureInfo = new CultureInfo("es-ES");
var startDate = DateTime.Parse(start, cultureInfo);
var endDate = DateTime.Parse(end, cultureInfo);
if (startDate > endDate)
(startDate, endDate) = (endDate, startDate);
startDate = SetTime(startDate, "min");
endDate = SetTime(endDate);
Console.Writeline($"start: {startDate} - end: {endDate}");
// returns: start: 01/01/2022 00:00:00 - end: 31/03/2022 23:59:59
}
Method setTime makes that you want.方法 setTime 使您想要。
GetDateTimes method prevents for swapping start (older date) and end (newer date). GetDateTimes 方法防止交换开始(旧日期)和结束(新日期)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.