C# 给出了未来的一天和天数。返回前几天的星期几
我正在尝试编写一段代码,其中给出了一天和几天的时间,例如,(3月3日,星期一) 这应该返回“星期四”,因为从星期一开始的3天是星期四 这就是我所做的。问题是,如果要求(星期四,5)或(星期三,7)或(星期五,2),它将无法返回任何东西 如您所见,我正在使用数组的索引来获得结果。我不确定我需要如何修改代码以获得,例如,从星期五开始的第10天C# 给出了未来的一天和天数。返回前几天的星期几,c#,C#,我正在尝试编写一段代码,其中给出了一天和几天的时间,例如,(3月3日,星期一) 这应该返回“星期四”,因为从星期一开始的3天是星期四 这就是我所做的。问题是,如果要求(星期四,5)或(星期三,7)或(星期五,2),它将无法返回任何东西 如您所见,我正在使用数组的索引来获得结果。我不确定我需要如何修改代码以获得,例如,从星期五开始的第10天 using System; namespace ConsoleApp2 { class Program { static v
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
string Day = "Friday";
int ahead = 3;
Console.WriteLine(FindDay(Day, ahead));
}
public static string FindDay(string dayGiven, int daysAhead)
{
string[] week = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
int indexOfDayGiven = 0;
string ans = "";
foreach (string day in week)
{
if (day == dayGiven)
{
indexOfDayGiven = Array.IndexOf(week, dayGiven);
}
}
foreach(string day in week)
{
if (Array.IndexOf(week, day) ==indexOfDayGiven + daysAhead)
{
ans = day;
}
}
return ans;
}
}
}
最好的方法是使用c#中的
%
操作。
大概是这样的:
var ind = (indexOfDayGiven + daysAhead) % 7;
我将使用如下示例中的枚举。找到当天的方法与评论和其他答案中的方法相同:使用
使用系统;
利用制度全球化;
公共课程
{
公共静态void Main()
{
int n=8;
对于(int startDay=0;startDay<7;startDay++)
WriteLine({1}的{0}天为{2}),n,GetDayName((DayOfWeek)startDay),GetDayName(getDaysHead((DayOfWeek)startDay,n));
}
公共静态字符串GetDayName(DayOfWeek-day)
{
返回日期TimeFormatInfo.CurrentInfo.GetDayName(天);
}
公共静态DayOfWeek GetDaysHead(DayOfWeek开始,int DaysHead)
{
如果(daysAhead<0)抛出新ArgumentOutOfRangeException(nameof(daysAhead));
如果(dayshead==0)返回开始;
返回(DayOfWeek)(((int)开始+日头)%7);
}
}
DayOfWeek
是DateTime
和DateTimeOffset
的属性。它本身不是本地化的,但是您可以很容易地获得如上所示的本地化字符串。正如其他人所提到的,您可以使用模运算符(它返回除法后的余数)来获取数组中的值。因此,如果您有Friday
(5
)并且想知道哪一天是4
天,我们将这两天相加,然后取数组中项目数的模(5+4=9;9%7=2;
),或者在一行中:((5+4)%7)=2
,这是我们结果的索引:
int result = week[(Array.IndexOf(week, "Friday") + 4) % 7];
我们还可以使用DayOfWeek
enum,而不是创建一个日期名称数组。这允许我们对输入日字符串进行不区分大小写的解析,以获取枚举值。这样做的好处是,枚举在一个对象中同时包含名称
和索引
,因此我们不必查找索引-我们只需将其转换为int
,进行计算,然后将结果转换回DayOfWeek
,并获得字符串结果:
public static string FindDay(string dayGiven, int daysAhead)
{
DayOfWeek startDay;
if (!Enum.TryParse(dayGiven, true, out startDay))
{
throw new ArgumentException($"'{dayGiven}' is not a valid day.");
}
return ((DayOfWeek) (((int) startDay + daysAhead) % 7)).ToString();
}
indexof+days模7?注意,这里有一个枚举,你可能想利用它来实现这个?另一点:如果希望
dayshead
具有正值,那么您应该防止负值(不要相信用户输入)。使用indexOfDayGiven=Array.IndexOf(week)
而不使用dayGiven
我实际上建议返回DayOfWeek
值,任何调用该方法的人都可以将其本地化(参见我的答案)。我确实意识到,问题也只是英语。仅供参考。
public static string FindDay(string dayGiven, int daysAhead)
{
DayOfWeek startDay;
if (!Enum.TryParse(dayGiven, true, out startDay))
{
throw new ArgumentException($"'{dayGiven}' is not a valid day.");
}
return ((DayOfWeek) (((int) startDay + daysAhead) % 7)).ToString();
}