2014-10-01 51 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