gpt4 book ai didi

c# - 获取上个月的日期

转载 作者:太空宇宙 更新时间:2023-11-03 11:18:36 25 4
gpt4 key购买 nike

我有一个看似简单的日期问题,但我无法全神贯注地尝试有效地解决它……我基本上需要获取前几个月的特定日期。

例如:如果今天是该月的第三个星期四,我想获取上个月的第三个星期四的日期。重要的是,它基于一天中的天数……即:第一个星期一、第四个星期五、第二个星期三等。

完成这项工作的最佳方法是什么?

顺便说一句...如果没有等效的前几个月的一天也没关系。我能应付。此外,目前我正在手动计算天数(“星期一”、“星期二”等)来解决这个问题。我只是希望有一种更优雅的方式来做到这一点。

最佳答案

这是我会做的:

static DateTime? GetLastMonthSameNthDayOfWeek(DateTime date)
{
int nth = (date.Day-1) / 7; // returns 0 if 1st, 1 if 2nd...
var prevMonthDay = date.AddMonths(-1);

// find the first date of month having the same day of week
var d = new DateTime(prevMonthDay.Year, prevMonthDay.Month, 1);
while(d.Day <= 7)
{
if (d.DayOfWeek == date.DayOfWeek)
break;
d = d.AddDays(1);
}
// go to nth day of week
d = d.AddDays(7 * nth);
// if we have passed the current month, there's no nth day of week
if (d.Month != prevMonthDay.Month)
return null;
return d;
}

使用示例:

// 3rd wednesday of August 2012
var a = new DateTime(2012, 8, 15);
var aPrev = GetLastMonthSameNthDayOfWeek(a);
// aPrev = July 18th 2012 (i.e. the 3rd wednesday of July 2012)

// 5th wednesday of August 2012
var b = new DateTime(2012, 8, 15);
var bPrev = GetLastMonthSameNthDayOfWeek(b);
// bPrev = null, because there's no 5th wednesday of July 2012

注意:

获取一个月内星期几的序数位置真的很容易:

int nth = ((date.Day-1) / 7) + 1; // 1 -> 1st, 2 -> 2nd, 3 -> 3rd ...

关于c# - 获取上个月的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com