Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用当前日期作为引用获取特定日期_C#_Datetime_Date_Timespan - Fatal编程技术网

C# 使用当前日期作为引用获取特定日期

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

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

例如,如果今天是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(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);