我目前正在研究一段代碼,我需要根據當年的一週(根據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