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

时间:2012-05-28 08:17:24

标签: c# .net datetime

当我这样做时,我有相同的结果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());

以及我使用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());

我尝试像http://www.mbari.org/staff/rich/utccalc.htm

那样得到1338168600

更新

谢谢我改为

    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());  

但我得到1338147000仍然不是1338168600

7 个答案:

答案 0 :(得分:60)

日期是不可变对象,即在创建后无法修改它们。 DateTime.AddHours返回一个新的DateTime实例,该实例向后移动4小时,但“date”不会被修改。

使用:

DateTime newDate = date.AddHours(-4);

答案 1 :(得分:8)

AddHours会返回 DateTime对象,这是将小时数添加到原始对象的结果。原件保持不变。

因此,您需要date = date.AddHours(-4);而非date.AddHours(-4);

答案 2 :(得分:5)

原始日期设置为向后4小时,但您没有将其设置为新日期。试试这个:

date = date.AddHours(-4);

答案 3 :(得分:4)

AddHours只返回新的递增日期,请使用:

date = date.AddHours(-4);

答案 4 :(得分:4)

DateTime不是不可变的。只是DateTime方法不会改变结构,而是返回一个新结构。

如果你这样做:

DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now;
d1 = d2;

然后,结构d1将被d2的值覆盖。

我不知道是否有可能拥有不可变结构。

答案 5 :(得分:2)

AddHours返回新的DateTime对象。这样做:

date = date.AddHours(-4);

文档:link

答案 6 :(得分:1)

尝试这是否有效:

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);

这似乎也改变了日期中的日期也增加了几小时。