繁体   English   中英

一次构造一个DateTime

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM