Seb*_*son 57

var now = DateTime.Now;    
var firstDayCurrentMonth = new DateTime(now.Year, now.Month, 1);

var lastDayLastMonth = firstDayCurrentMonth.AddDays(-1);
Run Code Online (Sandbox Code Playgroud)

  • 优秀!刚为此完成了单元测试,适用于飞跃和非闰年! (2认同)

Luk*_*keH 16

DateTime now = DateTime.Now;
DateTime lastDayOfLastMonth = now.Date.AddDays(-now.Day);
Run Code Online (Sandbox Code Playgroud)

  • @opedog:Costly是一个相对术语.这个*慢*版本可以在我的机器上管理大约1.7M迭代/秒,相比之下,如果我调用`DateTime.Now`一次并重新使用该实例,则大约2.7M迭代/秒.当然是一个不错的改进,但我怀疑它是否会在大多数现实世界的情况下被注意到. (9认同)
  • 问题不在于代码*​​代价高昂*.问题是代码是*错*因为它有*竞争条件*.如果代码运行使得第一次调用现在发生在11月30日23:59:59.9999,第二次调用现在发生在12月1日12:00:00.0001怎么办?比赛条件不仅仅是线程情况下的问题; 在时间的确切细节很重要的任何情况下,它们都是一个问题. (6认同)
  • @Eric:好点,踢自己不发现那个!相应编辑 - 现在它更快*和*正确! (3认同)