C# 使用当前日期作为引用获取特定日期
我想通过使用当前日期获得两个特定的日期,让我进一步解释 例如,如果今天是2011年10月27日,那么我希望是2011年7月1日和2011年9月30日。请注意,这是一个三个月的期限(不包括本月),我如何才能做到这一点 目前,我正在遵循一种自行设计的方法,但我认为这远远不够好。这是代码C# 使用当前日期作为引用获取特定日期,c#,datetime,date,timespan,C#,Datetime,Date,Timespan,我想通过使用当前日期获得两个特定的日期,让我进一步解释 例如,如果今天是2011年10月27日,那么我希望是2011年7月1日和2011年9月30日。请注意,这是一个三个月的期限(不包括本月),我如何才能做到这一点 目前,我正在遵循一种自行设计的方法,但我认为这远远不够好。这是代码 TimeSpan TSFrom = new TimeSpan(90 + DateTime.Now.Day, 0, 0, 0, 0); TimeSpan TSTo = new TimeSpan(Date
TimeSpan TSFrom = new TimeSpan(90 + DateTime.Now.Day, 0, 0, 0, 0);
TimeSpan TSTo = new TimeSpan(DateTime.Now.Day, 0, 0, 0, 0);
Response.Write(DateTime.Now.Subtract(TSFrom).ToShortDateString());
Response.Write(DateTime.Now.Subtract(TSTo).ToShortDateString());
此代码返回这些值
2011年7月2日至2011年9月30日
虽然这是可以接受的,但它看起来仍然不是一个完美的方式,第一次约会是从月的第二天开始,而它应该从第一天开始,我认为这是因为有些月在29日结束,而有些月在30日结束。那么,我怎样才能得到像2011年7月1日到2011年9月30日这样的完美日期呢
谢谢
DateTime now = DateTime.Today;
DateTime firstOfMonth = now.AddDays(-now.Day + 1);
DateTime beginning = firstOfMonth.AddMonths(-3);
DateTime end = firstOfMonth.AddDays(-1);
我们通过减去(当前日期-1)来“回滚”到月初,
期末为firstOfMonth.AddDays(-1)代码>,期初为firstOfMonth.AddMonths(-3)代码>
我们通过减去(当前日期-1)来“回滚”到月初,
期末为firstOfMonth.AddDays(-1)代码>,期初为firstOfMonth.AddMonths(-3)代码>
它可能更短,但可读性较差
var now = DateTime.Now;
var end = new DateTime(now.Year, now.Month, 1).AddDays(-1); // Last day of previous month
var start = new DateTime(now.Year, now.Month, 1).AddMonths(-3); // First day of third-last month
它可能更短,但可读性较差
var now = DateTime.Now;
var end = new DateTime(now.Year, now.Month, 1).AddDays(-1); // Last day of previous month
var start = new DateTime(now.Year, now.Month, 1).AddMonths(-3); // First day of third-last month
(您可以将新日期时间(now.Year,now.Month,1)
存储在局部变量中,我想这是个人喜好的问题……)
(您可以将新的日期时间(now.Year,now.Month,1)
存储在局部变量中,我想这是个人喜好的问题……很好,除了它是var toWithDay=DateTime.now
@Otiel,我想OP只对日期感兴趣,而不是时间,或者我遗漏了什么?不,你是对的,但我的评论不是关于日期或时间。在您的代码片段中,到
将等于2012年1月31日
,而OP将是2011年9月30日
。使用var toWithDay=DateTime.Now代码>或var toWithDay=DateTime.Today代码>而不是var toWithDay=DateTime.Today.AddMonths(4)代码>然后它会尊重OP的请求。@Otiel,啊,收到了,谢谢,(我早上很慢)。。。将再次修复相应的错误答案;)。它不是var toWithDay=DateTime.Today.AddMonths(1)代码>但是var toWithDay=DateTime.Today代码>很好,除了它是var toWithDay=DateTime.Now
@Otiel,我想OP只对日期感兴趣,而不是时间,或者我遗漏了什么?不,你是对的,但我的评论不是关于日期或时间。在您的代码片段中,到
将等于2012年1月31日
,而OP将是2011年9月30日
。使用var toWithDay=DateTime.Now代码>或var toWithDay=DateTime.Today代码>而不是var toWithDay=DateTime.Today.AddMonths(4)代码>然后它会尊重OP的请求。@Otiel,啊,收到了,谢谢,(我早上很慢)。。。将再次修复相应的错误答案;)。它不是var toWithDay=DateTime.Today.AddMonths(1)代码>但是var toWithDay=DateTime.Today代码>-1:这显然是错误的:如果您插入问题中给出的值(即当前日期为2011/10/27),您将得到2011/10/1-2011/12/31,而不是2011/7/1-2011/9/30。。。此外,我认为,艾哈迈德不希望得到固定的“季度”周期,而只希望得到前三个月。-1:这显然是错误的:如果你插入问题中给出的值(即当前日期是2011/10/27),你将得到2011/10/1-2011/12/31,而不是2011/7/1-2011/9/30。。。我还认为,艾哈迈德不想固定的“季度”周期,而只想固定前三个月。
DateTime now = DateTime.Now;
DateTime firstDayOfThisMonth = new DateTime(now.Year, now.Month, 1);
DateTime startDate = firstDayOfThisMonth.AddMonths(-3);
DateTime endDate = firstDayOfThisMonth.AddDays(-1);
Console.WriteLine(startDate);
Console.WriteLine(endDate);