我读到了这个问题和答案,如果你需要修改(或转移)对象的时间,你必须创建一个新的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());
答案 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”时,它都不会改变。
听起来你可能没有正确诊断事情。更改变量的值将更改它......