简体   繁体   English

为什么 DateTime.AddHours 似乎不起作用?

[英]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. 我不知道是否有可能有一个不可变的结构。

AddHours returns new DateTime object. AddHours返回新的DateTime对象。 do this: 做这个:

date = date.AddHours(-4);

Documentation: link 文档: 链接

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 方法防止交换开始(旧日期)和结束(新日期)。

(I'm going from this question .) (我从这个问题出发。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM