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

um6iljoc  于 2023-06-25  发布在  .NET
关注(0)|答案(9)|浏览(140)

我有相同的结果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());

我尝试得到1338168600喜欢http://www.mbari.org/staff/rich/utccalc.htm
更新:
谢谢我改了

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

cczfrluj

cczfrluj1#

日期是不可变的对象,即在创建之后不能修改它们。AddHours返回一个新的DateTime示例,该示例向后移动4小时,但不会修改“date”。
用途:

DateTime newDate = date.AddHours(-4);
z9smfwbn

z9smfwbn2#

AddHours返回一个 newDateTime对象,它是将小时数添加到原始值上的结果。原件保持不变。
因此,您需要date = date.AddHours(-4);而不仅仅是date.AddHours(-4);

dgsult0t

dgsult0t3#

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

date = date.AddHours(-4);
ecfdbz9o

ecfdbz9o4#

AddHours只是返回新的递增日期,使用以下:

date = date.AddHours(-4);
gijlo24d

gijlo24d5#

DateTime不是不可变的。只是DateTime方法不会更改结构体,而是返回一个新的结构体。
如果您这样做:

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

然后,结构体d1将被d2的值覆盖。
我不知道是否有可能有一个不可变的结构。

bd1hkmkf

bd1hkmkf6#

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

date = date.AddHours(-4);

文件:link

dgsult0t

dgsult0t7#

试试这个是否有效:

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

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

zbq4xfa0

zbq4xfa08#

这是我的解决方案:

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 void 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
    }

方法SetTime使你想要的。
GetDateTimes方法防止交换开始(较旧的日期)和结束(较新的日期)。
(我从这个question开始。)

wxclj1h5

wxclj1h59#

试试这个为我工作的:

DateTime date = DateTime.Now.AddHours(-4);

相关问题