私は現在、現在の週(ISO8601標準に準拠)に基づいてフォルダ名を指定する必要があるコードを作成中です。日時。関数呼び出しにおける今の評価
フォルダの名前は "y [year] w [week-of-year]"になります。例えば、フォルダ名は今週 "y2016w42"になる可能性があります。
私は現在、次の操作を行います。私は、最初のフォルダ名を生成するためにそれを使用する前に、変数nに現在の時刻を割り当てる
DateTime n = DateTime.Now;
string folderName = "y" + n.Year + "w" + DataHelper.WeekOfYearISO8601(n);
。
string folderName = "y" + DateTime.Now.Year + "w" + DataHelper.WeekOfYearISO8601(DateTime.Now);
がDateTime.Nowは一度か二度、実際の時間に評価されます。
今、私はむしろちょうど次の操作を行い、実際のでしょうか?コンパイラは最初の評価から再利用しますか、実際にはこのシナリオでは2つの異なるタイムスタンプを取得しますか?
このコードは99.9999%の時間で動作すると確信していますが、このコードを真夜中の新年夕方に実行するとどうなりますか? (今年の週がISO8601標準に従ってNYEで必然的に変更されず、今年も同じであると思われるという事実を無視することができます)。
DateTime.Nowが2回評価された場合、DateTimesの1つがまだ52週目の2016年にあり、もう1つが2017年の1週間目であるというシナリオを想像することができます。 "2017_52"または "2016_1"のいずれかが間違っています - 正しいものは "2017_1"または "2016_52"です。
私が提供したコードの最初のスニペットは大丈夫ですが、2番目のスニペットもすべてのシナリオで機能しますか?
なぜ2番目のバージョンが好きですか? (最初のバージョンはより読みやすく分かりやすいので) – Dexter
'string folderName =" y%sw%s "%(n.Year、DataHelper.WeekOfYearISO8601(n))'は私の好みの方法です:文字列の連結が遅いですPythonでは文字列が不変であるためです。書式文字列を書き込む方が高速です。 – TemporalWolf
@dexter: "DateTime.Now"は "n"と同じようにundestandableなので、余分な変数は不要だと思います。 – MNM