我阅读了这个问题和答案,如果您需要修改(或移动)对象的时间,则必须在其中创建一个新的 DateTime 对象,因为 DateTime 是一种不可变的对象类型。
如果正在声明变量并且在相同的词法范围内设置值,那很好。除了我在不同的词法范围内声明和设置值。通常我会做“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());