我目前正在研究一段代码,我需要根据当年的一周(根据ISO8601标准)命名一个文件夹。Datetime.Now评估函数调用
该文件夹将被命名为:“y [year] w [week-of-year]”。因此,例如本周文件夹名称可能是“y2016w42”。
我现在做到以下几点:
DateTime n = DateTime.Now;
string folderName = "y" + n.Year + "w" + DataHelper.WeekOfYearISO8601(n);
我第一次当前的时间分配给一个变量n,用它来生成文件夹名称之前。
现在,我真的宁愿只是做到以下几点:
string folderName = "y" + DateTime.Now.Year + "w" + DataHelper.WeekOfYearISO8601(DateTime.Now);
是DateTime.Now评估,以实际时间一次或两次?编译器是否从第一次评估中重新使用它,或者在这种情况下实际得到两个不同的时间戳?
我确定此代码的工作时间为99.9999%,但如果此代码在新年晚上在午夜运行会发生什么情况? (根据ISO8601标准,我们可以忽略这样一个事实,即每年的一周并没有在NYE上发生必然的变化,并且假设它们今年一致)。
如果对DateTime.Now进行了两次评估,我可以想象一种情况,其中一个DateTime仍在第52周2016年,而另一个在第1周2017年。这可能会造成麻烦,因为该文件夹可能会被命名“2017_52”或“2016_1”,两者都是错误的 - 正确的是“2017_1”或“2016_52”。
我敢肯定,我提供的代码的第一部分是没关系,但第二个代码段也适用于所有情况?
你为什么喜欢第二个版本? (imho第一个版本更具可读性,因此更容易理解) – Dexter
'string folderName =“y%sw%s”%(n.Year,DataHelper.WeekOfYearISO8601(n))''是我的首选方式:string concatenation is slow ,因为字符串在Python中是不可变的。填充格式字符串更快。 – TemporalWolf
@dexter:我认为“DateTime.Now”与“n”一样难以忍受,因此额外的变量看起来没有必要,特别是因为我发现自己经常用DateTime来做这件事。 – MNM