C# 获取输入为字符串时日期的整数

C# 获取输入为字符串时日期的整数,c#,winforms,datetime,C#,Winforms,Datetime,我很难理解如何获得与包含那天名称的字符串相对应的编号日期(月份)。例如,假设星期一是一月一日。我用“星期一”这个词填充字符串。在创建cron字符串时,我需要将“星期一”更改为“1” 简单地使用“Monday”不是一个选项,因为我正在创建的特定字符串指定下周一(仅下周一)为目标日期 我可以看到如何与MSDN文章进行比较,这篇文章涉及到DateTime.DayOfWeek,但是我非常不确定如何获得对应于下周一日期的整数 PS-我非常清楚这是一种糟糕的格式,但就我而言,我不知道如何更好地表达它。欢迎您

我很难理解如何获得与包含那天名称的字符串相对应的编号日期(月份)。例如,假设星期一是一月一日。我用“星期一”这个词填充字符串。在创建cron字符串时,我需要将“星期一”更改为“1”

简单地使用“Monday”不是一个选项,因为我正在创建的特定字符串指定下周一(仅下周一)为目标日期

我可以看到如何与MSDN文章进行比较,这篇文章涉及到
DateTime.DayOfWeek
,但是我非常不确定如何获得对应于下周一日期的整数


PS-我非常清楚这是一种糟糕的格式,但就我而言,我不知道如何更好地表达它。欢迎您试一试。

我使用此代码创建一周中天数的有序数组。(我自己也发现了类似的东西,不知道在哪里)。它需要一周中的几天,并根据区域设置进行排序

您可以在
daynameshift
上迭代,以比较当天的名称并返回其索引

int firstDayOfWeek = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
string[] dayNamesShifted = Shift(CultureInfo.CurrentCulture.DateTimeFormat.DayNames, firstDayOfWeek);
其中
Shift
为:

private static T[] Shift<T>(T[] array, int positions)
{
    T[] copy = new T[array.Length];
    Array.Copy(array, 0, copy, array.Length - positions, positions);
    Array.Copy(array, positions, copy, 0, array.Length - positions);
    return copy;
}
私有静态T[]移位(T[]数组,int位置)
{
T[]copy=新的T[array.Length];
数组.复制(数组,0,复制,数组.长度-位置,位置);
数组.复制(数组,位置,复制,0,数组.长度-位置);
返回副本;
}

如果您希望下周一进行计算,那么代码似乎已经列在StackOverflow上(例如)。如果您只支持英语(只需使用类似于
Enum.Parse()
)的内容),那么将日期字符串转换为
DayOfWeek
枚举应该是相当简单的。否则,您可以考虑@Patrick Hofman的答案中列出的当前文化。

所以您希望从今天开始查找下周一的日期,对吗?如果今天是星期一,我们是使用今天的日期还是找到下一个日期呢?@UlugbekUmirov在英式英语中,“本周一”往往意味着下一个星期一,不管今天是星期一。所以,回答你的问题,是的。我想知道下周一的日期;是的,如果星期一是今天,我们会找到下一个日期。这是。。。复杂。考虑到Quartz.NET总是一周中的第一天,我也不确定是否需要更改它们。此外,这不是给我一个从1到7的数字,而不是实际日期吗?这是真的。那不是你的问题吗?我想我误解了。你能澄清一下吗?如果这不是你想要的答案,至少这可以帮助你确定你在一周中的位置,并知道你需要增加多少天。从技术上讲,我可以使用1到7之间的整数,但是它将每周运行(或者至少每个月的每周运行),除非我在cron执行后删除它。考虑到日志依赖于目录中剩余的cron,这将有点难以实现。不过,我会将此数组用于定期作业,为此我非常感谢。@Wolfish:好的。那我就留着吧。谢谢你的回复。