使用当前日期作为参考获取特定日期

时间:2011-10-27 06:43:32

标签: c# datetime date timespan

我想通过使用当前日期获得两个特定日期,让我解释一下。

例如,如果今天是2011年10月27日,那么我想有7/01/2011和9/30/2011。请注意,它是三个月(不包括当月)我该怎么办?

目前我正在遵循自行设计的方法,但我认为它远非好。这是代码。

    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日的完美日期。

感谢。

4 个答案:

答案 0 :(得分: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

(您可以将new DateTime(now.Year, now.Month, 1)存储在本地变量中,这是个人品味的问题,我猜...)

答案 1 :(得分:1)

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);

答案 2 :(得分:1)

var fromWithDay = DateTime.Today.AddMonths(-3);
var from = new DateTime(fromWithDay.Year, fromWithDay.Month, 1);
var toWithDay = DateTime.Today;
var to = new DateTime(toWithDay.Year, toWithDay.Month, 1).AddDays(-1);

它可能更短但可读性更低

答案 3 :(得分:0)

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);