[英]Constructing a DateTime one step at a time
我试图一次用C#一步构造一个DateTime,例如,整个日期不在构造函数中。 我不明白哪里出了问题。
DateTime d = new DateTime((long)0);
d.AddYears(2000);
d.Years
仍等于1。 另外,我必须将日期存储很长。 因此,我不能只使用庞大的构造函数构建日期,也不能拥有持久的DateTime实例,因此我将其转储为long类型,然后将其还原,并从0
值开始。 我是否应该以不同于零的值开头?
到底是什么问题?
DateTime结构是不可变的,这意味着其属性无法更改。
AddYears方法返回必须使用的新的DateTime:
DateTime d = new DateTime((long)0);
d = d.AddYears(2000);
可能是题外话,但是如果您需要将DateTime
保留long
那么为什么不保留其Ticks
属性返回的值。
然后,您可以使用带有ticks参数的构造函数来还原DateTime
实例:
// stage 1
DateTime dt = DateTime.MinValue.AddYears(2009);
PersistTicksToSomewhere(dt.Ticks);
// stage 2
long ticks = GetPersistedTicksFromSomewhere();
DateTime dt = new DateTime(ticks).AddMonths(8);
PersistTicksToSomewhere(dt.Ticks);
// stage 3
long ticks = GetPersistedTicksFromSomewhere();
DateTime dt = new DateTime(ticks).AddDays(20);
PersistTicksToSomewhere(dt.Ticks);
// etc etc
DateTime构造函数有12种不同的重载。 应该至少有一种可以适应您的使用。
这个:
DateTime d = new DateTime(2000,0,0);
优于:
DateTime d = new DateTime((long)0);
d = d.AddYears(2000);
只需构造尽可能多的日期,然后为其他参数输入零即可。
DateTime是不可变的,因此必须将其更改为DateTime d = new DateTime(); d d.AddYears(2000);
DateTime d = new DateTime(); d d.AddYears(2000);
但这可以在99.9%的时间内实例化一个新的DateTime,这很好,但是如果嵌套在永远运行的循环中,则最好使用许多DateTime构造函数之一。 使用与string和StringBuilder相同的经验法则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.