如何在不同的词法范围中声明和设置DateTime对象的值?

时间:2012-09-17 16:44:02

标签: .net datetime lexical

我读到了这个问题和答案,如果你需要修改(或转移)对象的时间,你必须创建一个新的DateTime对象,因为DateTime是一个不可变的对象类型。

Why DateTime.AddHours doesn't seem to work?

如果声明变量并且在同一个词法范围内设置了一个值,那就没问题了。除了我在不同的词汇范围内声明和设置值。通常我会做" 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());        

1 个答案:

答案 0 :(得分: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));

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

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

为什么要为from_instant分配值,然后立即指定其他值?

(旁注:下划线在C#代码中非常不合时宜。)

  

在我的情况下,每当我重置“from_instant”时,它都不会改变。

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