0

我阅读了这个问题和答案,如果您需要修改(或移动)对象的时间,则必须在其中创建一个新的 DateTime 对象,因为 DateTime 是一种不可变的对象类型。

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

如果正在声明变量并且在相同的词法范围内设置值,那很好。除了我在不同的词法范围内声明和设置值。通常我会做“DateTime from_instant = null;” 所以它至少有一个价值,所以我可以在设置后使用它。但是,对于 DateTime,一旦设置了值,它就是不可变的。那么如何通过执行“from_instant.AddHours(-10);”来调整对象的值?例如,在它被声明的词法范围之外?

在我下面的例子中,每当我重置“from_instant”时,它都不会改变。我希望能够改变它。由于它是不可变的,您通常如何重置该值?

    DateTime from_instant = DateTime.Now;

    bool set_scan_start_instant_to_last_scan_instant = Convert.ToBoolean(GetConfig("set_scan_start_instant_to_last_scan_instant"));

    if (set_scan_start_instant_to_last_scan_instant)
    {
        from_instant = GetScanTimeFromFile(@".\last_scan_instant.txt");
        from_instant = DateTime.Now;
    }
    else
    {
        if (!string.IsNullOrEmpty(scan_interval_minutes))
        {
            from_instant = DateTime.Now.AddMinutes(Convert.ToInt32(scan_interval_minutes));
        }
        else if (!string.IsNullOrEmpty(scan_interval_hours))
        {
            from_instant = DateTime.Now.AddHours(Convert.ToInt32(scan_interval_hours));
        }
        else if (!string.IsNullOrEmpty(scan_interval_days))
        {
            from_instant = DateTime.Now.AddDays(Convert.ToInt32(scan_interval_days));
        }
    }

    DateTime to_instant = DateTime.Now;
    WriteScanTimeToFile(@".\last_scan_instant.txt", to_instant.ToString());

    Console.WriteLine("from_instant: " + from_instant.ToString());  
    Console.WriteLine("to_instant: " + to_instant.ToString());        
4

1 回答 1

1

问题是您一直在调用方法DateTime并忽略返回值。不要那样做。

改变这个:

from_instant.AddHours(Convert.ToInt32(scan_interval_hours));

from_instance = from_instant.AddHours(Convert.ToInt32(scan_interval_hours));

或者:

fromInstance += TimeSpan.FromHours(Convert.ToInt32(scan_interval_hours));

(ETC)。目前尚不清楚为什么你似乎认为你不能这样做。也不清楚你期望这段代码做什么:

from_instant = GetScanTimeFromFile(@".\last_scan_instant.txt");
from_instant = DateTime.Now;

为什么要给一个值赋值from_instant,然后立即赋值另一个值?

(旁注:下划线在 C# 代码中非常通用。)

在我下面的例子中,每当我重置“from_instant”时,它都不会改变。

听起来你可能没有正确诊断事情。改变变量的值真的改变它......

于 2012-09-17T16:45:48.363 回答