2014-10-01 64 views
1

我很努力地理解如何获取与包含当天名称的字符串对应的编号日期(月份)。例如,假设星期一是1月的第一天。我填入一个字符串“Monday”。在创建cron字符串时,我需要将“星期一”更改为“1”。获取输入为字符串的日期的整数

只是使用“星期一”不是一个选项,因为我创建的特定字符串指定下一个星期一(并且只在下个星期一)作为目标日期。

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

PS - 我很惊讶地意识到这是糟糕的格式化,但对于我的生活,我不知道如何更好地说出它。欢迎您去一趟。

+0

所以你想从今天开始找到下个星期一的日期吧?如果今天是星期一,我们用今天的日期还是找到下一个呢? – 2014-10-01 11:56:55

+0

@UlugbekUmirov那么,在英国人的英语中,“这个星期一”往往意味着下个星期一,无论今天是星期一。所以,回答你的问题,是的。我想找到下周一的日期;是的,如果周一是今天,我们会找到下一个日期。 – Wolfish 2014-10-01 11:59:03

+1

http://stackoverflow.com/a/6346190/1803777 – 2014-10-01 12:02:03

回答

1

如果您正在寻找计算下星期一,似乎代码已经上市的StackOverflow(例如Datetime - Get next tuesday)。如果您仅支持英语,则将日期字符串转换为DayOfWeek枚举应该相当简单(只需使用诸如Enum.Parse()之类的东西)。否则,您可以考虑@Patrick Hofman的答案中列出的当前文化。

+0

这很好,我很欣赏这个链接。非常感谢。 – Wolfish 2014-10-01 12:03:45

2

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

您可以遍历dayNamesShifted来比较当天的名称并返回它的索引。

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; 
} 
+0

这是...复杂。我不确定我是否需要改变它们,因为周日总是Quartz.NET所关注的一周的第一天。此外,这不是给我一个从1到7的数字,而不是实际的日期吗? – Wolfish 2014-10-01 12:02:46

+1

的确如此。这不是你的问题吗?猜猜我误解了。你能澄清吗? – 2014-10-01 12:03:30

+1

如果这不是您正在寻找的答案,至少这可以帮助您确定您在一周中的位置,并了解您需要添加多少天。 – 2014-10-01 12:05:12